Skip to content

Commit

Permalink
Feat/sections variants (#65)
Browse files Browse the repository at this point in the history
* Create page and section variant

Signed-off-by: Marcos Candeia <marrcooos@gmail.com>

* Rename variants to page name

Signed-off-by: Marcos Candeia <marrcooos@gmail.com>

* Move to multivariate flag

Signed-off-by: Marcos Candeia <marrcooos@gmail.com>

* Add multivariate flag for sections

Signed-off-by: Marcos Candeia <marrcooos@gmail.com>

* Remove multivariate comment

Signed-off-by: Marcos Candeia <marrcooos@gmail.com>

* Update deco ver

Signed-off-by: Marcos Candeia <marrcooos@gmail.com>

---------

Signed-off-by: Marcos Candeia <marrcooos@gmail.com>
  • Loading branch information
mcandeia authored Sep 19, 2023
1 parent 86f3c9a commit d7dacb6
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 68 deletions.
1 change: 1 addition & 0 deletions deno.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"check": "deno fmt && deno lint && deno check **/mod.ts",
"release": "deno eval 'import \"deco/scripts/release.ts\"'",
"start": "deno run -A ./scripts/start.ts",
"bundle": "deno eval 'import \"deco/scripts/apps/bundle.ts\"'",
"link": "deno eval 'import \"deco/scripts/apps/link.ts\"'",
"unlink": "deno eval 'import \"deco/scripts/apps/unlink.ts\"'",
"serve": "deno eval 'import \"deco/scripts/apps/serve.ts\"'",
Expand Down
2 changes: 1 addition & 1 deletion import_map.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@
"std/": "https://deno.land/std@0.190.0/",
"partytown/": "https://deno.land/x/partytown@0.3.4/",
"deco-sites/std/": "https://denopkg.com/deco-sites/std@1.22.9/",
"deco/": "https://deno.land/x/deco@1.36.10/"
"deco/": "https://deno.land/x/deco@1.36.17/"
}
}
60 changes: 1 addition & 59 deletions website/flags/multivariate.ts
Original file line number Diff line number Diff line change
@@ -1,59 +1 @@
import { MultivariateFlag, Variant } from "deco/blocks/flag.ts";
import { Section } from "deco/blocks/section.ts";
import { asResolved } from "deco/engine/core/resolver.ts";

/**
* @title Multivariate
*/
export type MultivariateProps<T = Section[]> = MultivariateFlag<T>;

/**
* @title Variant
* @label hidden
*/
export default function MultivariateFlag(
props: MultivariateProps<Section[]>,
): MultivariateFlag<Section[]> {
return props;
}

const isMultivariateProps = (
props: unknown | MultivariateProps<unknown>,
): props is MultivariateProps<unknown> => {
return (props as MultivariateProps<unknown>)?.variants !== undefined &&
Array.isArray((props as MultivariateProps<unknown>)?.variants);
};

const isVariant = (
variant: unknown | Variant<unknown>,
): variant is Variant<unknown> => {
return (variant as Variant<unknown>).value !== undefined &&
typeof variant === "object";
};

/**
* This is used to avoid resolving flag values before matcher is actually evaluated
*/
export const onBeforeResolveProps = (props: unknown) => {
if (isMultivariateProps(props)) {
const newVariants = [];
for (const variant of props.variants) {
if (isVariant(variant)) {
newVariants.push({
...variant,
value: asResolved(variant.value, true),
});
} else {
newVariants.push(variant);
}
}
if (newVariants.length > 0) { // avoid shallow copy
return {
...props,
variants: newVariants,
};
}
return props;
}
return props;
};
export { default, onBeforeResolveProps } from "./multivariate/page.ts";
13 changes: 13 additions & 0 deletions website/flags/multivariate/page.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export { onBeforeResolveProps } from "../../utils/multivariate.ts";
import { MultivariateFlag } from "deco/blocks/flag.ts";
import { Section } from "deco/blocks/section.ts";
import multivariate, { MultivariateProps } from "../../utils/multivariate.ts";

/**
* @title Page Variants
*/
export default function PageVariants(
props: MultivariateProps<Section[]>,
): MultivariateFlag<Section[]> {
return multivariate(props);
}
13 changes: 13 additions & 0 deletions website/flags/multivariate/section.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export { onBeforeResolveProps } from "../../utils/multivariate.ts";
import { MultivariateFlag } from "deco/blocks/flag.ts";
import { Section } from "deco/blocks/section.ts";
import multivariate, { MultivariateProps } from "../../utils/multivariate.ts";

/**
* @title Section Variants
*/
export default function SectionVariants(
props: MultivariateProps<Section>,
): MultivariateFlag<Section> {
return multivariate(props);
}
20 changes: 12 additions & 8 deletions website/manifest.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,12 @@ import * as $$$$$$$9 from "./matchers/device.ts";
import * as $$$$$$$10 from "./matchers/host.ts";
import * as $$$$$$$11 from "./matchers/always.ts";
import * as $$$$$$$12 from "./matchers/userAgent.ts";
import * as $$$$$$$$0 from "./flags/audience.ts";
import * as $$$$$$$$1 from "./flags/multivariate.ts";
import * as $$$$$$$$2 from "./flags/everyone.ts";
import * as $$$$$$$$3 from "./flags/flag.ts";
import * as $$$$$$$$0 from "./flags/multivariate/section.ts";
import * as $$$$$$$$1 from "./flags/multivariate/page.ts";
import * as $$$$$$$$2 from "./flags/audience.ts";
import * as $$$$$$$$3 from "./flags/multivariate.ts";
import * as $$$$$$$$4 from "./flags/everyone.ts";
import * as $$$$$$$$5 from "./flags/flag.ts";
import * as $$$$$$$$$0 from "./actions/secrets/encrypt.ts";

const manifest = {
Expand Down Expand Up @@ -80,10 +82,12 @@ const manifest = {
"website/matchers/userAgent.ts": $$$$$$$12,
},
"flags": {
"website/flags/audience.ts": $$$$$$$$0,
"website/flags/everyone.ts": $$$$$$$$2,
"website/flags/flag.ts": $$$$$$$$3,
"website/flags/multivariate.ts": $$$$$$$$1,
"website/flags/audience.ts": $$$$$$$$2,
"website/flags/everyone.ts": $$$$$$$$4,
"website/flags/flag.ts": $$$$$$$$5,
"website/flags/multivariate.ts": $$$$$$$$3,
"website/flags/multivariate/page.ts": $$$$$$$$1,
"website/flags/multivariate/section.ts": $$$$$$$$0,
},
"actions": {
"website/actions/secrets/encrypt.ts": $$$$$$$$$0,
Expand Down
64 changes: 64 additions & 0 deletions website/utils/multivariate.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import { MultivariateFlag, Variant } from "deco/blocks/flag.ts";
import { asResolved } from "deco/engine/core/resolver.ts";

/**
* @title Multivariate
*/
export interface MultivariateProps<T> {
/**
* @minItems 1
* @addBehavior 1
*/
variants: Variant<T>[];
}

/**
* @title Variant
* @label hidden
*/
export default function MultivariateFlag<T>(
props: MultivariateProps<T>,
): MultivariateFlag<T> {
return props;
}

const isMultivariateProps = (
props: unknown | MultivariateProps<unknown>,
): props is MultivariateProps<unknown> => {
return (props as MultivariateProps<unknown>)?.variants !== undefined &&
Array.isArray((props as MultivariateProps<unknown>)?.variants);
};

const isVariant = (
variant: unknown | Variant<unknown>,
): variant is Variant<unknown> => {
return (variant as Variant<unknown>).value !== undefined &&
typeof variant === "object";
};

/**
* This is used to avoid resolving flag values before matcher is actually evaluated
*/
export const onBeforeResolveProps = (props: unknown) => {
if (isMultivariateProps(props)) {
const newVariants = [];
for (const variant of props.variants) {
if (isVariant(variant)) {
newVariants.push({
...variant,
value: asResolved(variant.value, true),
});
} else {
newVariants.push(variant);
}
}
if (newVariants.length > 0) { // avoid shallow copy
return {
...props,
variants: newVariants,
};
}
return props;
}
return props;
};

0 comments on commit d7dacb6

Please sign in to comment.