@sanity/personalization-plugin 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,564 +1,4 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import { useClient, useWorkspace, useFormValue, defineDocumentFieldAction, set, unset, getPublishedId, useDocumentOperation, isReference, isImage, isDocumentSchemaType, definePlugin, isObjectInputProps, defineType, defineField } from "sanity";
3
- import { c } from "react/compiler-runtime";
4
- import { Button, Stack, Inline, Select as Select$1, Card, Text } from "@sanity/ui";
5
- import { uuid } from "@sanity/uuid";
6
- import equal from "fast-deep-equal";
7
- import { createContext, useContext, useState, useEffect } from "react";
8
- import { suspend } from "suspend-react";
9
- import { CloseIcon } from "@sanity/icons";
10
- import { GiSoapExperiment } from "react-icons/gi";
11
- const CONFIG_DEFAULT = {
12
- fields: [],
13
- apiVersion: "2024-11-07",
14
- experimentNameOverride: "experiment",
15
- variantNameOverride: "variant",
16
- variantId: "variantId",
17
- variantArrayName: "variants",
18
- experimentId: "experimentId"
19
- }, ExperimentContext = createContext({
20
- ...CONFIG_DEFAULT,
21
- experiments: []
22
- });
23
- function useExperimentContext() {
24
- return useContext(ExperimentContext);
25
- }
26
- function ExperimentProvider(props) {
27
- const $ = c(14), {
28
- experimentFieldPluginConfig
29
- } = props;
30
- let t0;
31
- $[0] !== experimentFieldPluginConfig.apiVersion ? (t0 = {
32
- apiVersion: experimentFieldPluginConfig.apiVersion
33
- }, $[0] = experimentFieldPluginConfig.apiVersion, $[1] = t0) : t0 = $[1];
34
- const client = useClient(t0), workspace = useWorkspace();
35
- let t1;
36
- $[2] !== client || $[3] !== experimentFieldPluginConfig || $[4] !== workspace ? (t1 = Array.isArray(experimentFieldPluginConfig.experiments) ? experimentFieldPluginConfig.experiments : suspend(async () => typeof experimentFieldPluginConfig.experiments == "function" ? experimentFieldPluginConfig.experiments(client) : experimentFieldPluginConfig.experiments, [workspace], {
37
- equal
38
- }), $[2] = client, $[3] = experimentFieldPluginConfig, $[4] = workspace, $[5] = t1) : t1 = $[5];
39
- const experiments = t1;
40
- let t2;
41
- $[6] !== experimentFieldPluginConfig || $[7] !== experiments ? (t2 = {
42
- ...experimentFieldPluginConfig,
43
- experiments
44
- }, $[6] = experimentFieldPluginConfig, $[7] = experiments, $[8] = t2) : t2 = $[8];
45
- const context = t2;
46
- let t3;
47
- $[9] !== props ? (t3 = props.renderDefault(props), $[9] = props, $[10] = t3) : t3 = $[10];
48
- let t4;
49
- return $[11] !== context || $[12] !== t3 ? (t4 = /* @__PURE__ */ jsx(ExperimentContext.Provider, { value: context, children: t3 }), $[11] = context, $[12] = t3, $[13] = t4) : t4 = $[13], t4;
50
- }
51
- const ArrayInput = (props) => {
52
- const $ = c(35);
53
- let experimentId, onItemAppend, t0, t1, variantId, variantName;
54
- if ($[0] !== props) {
55
- const fieldPath = props.path.slice(0, -1);
56
- ({
57
- onItemAppend,
58
- variantName,
59
- variantId,
60
- experimentId
61
- } = props), t0 = useFormValue, t1 = [...fieldPath, experimentId], $[0] = props, $[1] = experimentId, $[2] = onItemAppend, $[3] = t0, $[4] = t1, $[5] = variantId, $[6] = variantName;
62
- } else
63
- experimentId = $[1], onItemAppend = $[2], t0 = $[3], t1 = $[4], variantId = $[5], variantName = $[6];
64
- const experimentValue = t0(t1), {
65
- experiments
66
- } = useExperimentContext();
67
- let t2;
68
- $[7] !== experimentId || $[8] !== experimentValue || $[9] !== onItemAppend || $[10] !== variantId || $[11] !== variantName ? (t2 = async (variant) => {
69
- const item = {
70
- _key: uuid(),
71
- [variantId]: variant.id,
72
- [experimentId]: experimentValue,
73
- _type: variantName
74
- };
75
- onItemAppend(item);
76
- }, $[7] = experimentId, $[8] = experimentValue, $[9] = onItemAppend, $[10] = variantId, $[11] = variantName, $[12] = t2) : t2 = $[12];
77
- const handleClick = t2;
78
- let T0, T1, t3, t4, t5, t6;
79
- if ($[13] !== experimentValue || $[14] !== experiments || $[15] !== handleClick || $[16] !== props || $[17] !== variantId) {
80
- const filteredVariants = experiments.find((option) => option.id === experimentValue)?.variants || [], usedVariants = (props.value || [])?.map((variant_0) => variant_0[variantId]);
81
- T1 = Stack, t5 = 3, $[24] !== props ? (t6 = props.renderDefault({
82
- ...props,
83
- arrayFunctions: _temp$2
84
- }), $[24] = props, $[25] = t6) : t6 = $[25], T0 = Inline, t3 = 1, t4 = filteredVariants.map((variant_1) => /* @__PURE__ */ jsx(Button, { text: `Add ${variant_1.label}`, mode: "ghost", disabled: usedVariants?.includes(variant_1.id), onClick: () => handleClick(variant_1) }, `${experimentValue}-${variant_1.id}`)), $[13] = experimentValue, $[14] = experiments, $[15] = handleClick, $[16] = props, $[17] = variantId, $[18] = T0, $[19] = T1, $[20] = t3, $[21] = t4, $[22] = t5, $[23] = t6;
85
- } else
86
- T0 = $[18], T1 = $[19], t3 = $[20], t4 = $[21], t5 = $[22], t6 = $[23];
87
- let t7;
88
- $[26] !== T0 || $[27] !== t3 || $[28] !== t4 ? (t7 = /* @__PURE__ */ jsx(T0, { gap: t3, children: t4 }), $[26] = T0, $[27] = t3, $[28] = t4, $[29] = t7) : t7 = $[29];
89
- let t8;
90
- return $[30] !== T1 || $[31] !== t5 || $[32] !== t6 || $[33] !== t7 ? (t8 = /* @__PURE__ */ jsxs(T1, { gap: t5, children: [
91
- t6,
92
- t7
93
- ] }), $[30] = T1, $[31] = t5, $[32] = t6, $[33] = t7, $[34] = t8) : t8 = $[34], t8;
94
- };
95
- function _temp$2() {
96
- return null;
97
- }
98
- const useAddExperimentAction = (props) => {
99
- const $ = c(6), {
100
- onChange,
101
- active,
102
- experimentNameOverride
103
- } = props;
104
- let t0;
105
- $[0] !== active || $[1] !== onChange ? (t0 = () => {
106
- onChange([set(!active, ["active"])]);
107
- }, $[0] = active, $[1] = onChange, $[2] = t0) : t0 = $[2];
108
- const handleAddAction = t0, t1 = `Add ${experimentNameOverride}`;
109
- let t2;
110
- return $[3] !== handleAddAction || $[4] !== t1 ? (t2 = {
111
- title: t1,
112
- type: "action",
113
- icon: GiSoapExperiment,
114
- onAction: handleAddAction,
115
- renderAsButton: !0
116
- }, $[3] = handleAddAction, $[4] = t1, $[5] = t2) : t2 = $[5], t2;
117
- }, useRemoveExperimentAction = (props) => {
118
- const $ = c(8), {
119
- onChange,
120
- active,
121
- experimentId,
122
- experimentNameOverride,
123
- variantNameOverride
124
- } = props;
125
- let t0;
126
- $[0] !== active || $[1] !== experimentId || $[2] !== onChange || $[3] !== variantNameOverride ? (t0 = () => {
127
- const activeId = ["active"], experiment = [experimentId], variants = [`${variantNameOverride}s`];
128
- onChange([set(!active, activeId), unset(experiment), unset(variants)]);
129
- }, $[0] = active, $[1] = experimentId, $[2] = onChange, $[3] = variantNameOverride, $[4] = t0) : t0 = $[4];
130
- const handleClearAction = t0, t1 = `Remove ${experimentNameOverride}`;
131
- let t2;
132
- return $[5] !== handleClearAction || $[6] !== t1 ? (t2 = {
133
- title: t1,
134
- type: "action",
135
- icon: CloseIcon,
136
- onAction: handleClearAction,
137
- renderAsButton: !0
138
- }, $[5] = handleClearAction, $[6] = t1, $[7] = t2) : t2 = $[7], t2;
139
- }, createActions = ({
140
- onChange,
141
- inputId,
142
- active,
143
- experimentNameOverride,
144
- experimentId,
145
- variantNameOverride
146
- }) => {
147
- const removeAction = defineDocumentFieldAction({
148
- name: `Remove ${experimentNameOverride}`,
149
- useAction: (props) => useRemoveExperimentAction({
150
- active: !0,
151
- onChange,
152
- experimentNameOverride,
153
- experimentId,
154
- variantNameOverride
155
- })
156
- }), addAction = defineDocumentFieldAction({
157
- name: `Add ${experimentNameOverride}`,
158
- useAction: (props) => useAddExperimentAction({
159
- active: !1,
160
- onChange,
161
- experimentNameOverride
162
- })
163
- });
164
- return active ? removeAction : addAction;
165
- }, ExperimentField = (props) => {
166
- const $ = c(20), {
167
- onChange
168
- } = props.inputProps, {
169
- inputId,
170
- experimentNameOverride,
171
- experimentId,
172
- variantNameOverride
173
- } = props, active = props.value?.active;
174
- let t0;
175
- $[0] !== active || $[1] !== experimentId || $[2] !== experimentNameOverride || $[3] !== inputId || $[4] !== onChange || $[5] !== variantNameOverride ? (t0 = {
176
- onChange,
177
- inputId,
178
- active,
179
- experimentNameOverride,
180
- experimentId,
181
- variantNameOverride
182
- }, $[0] = active, $[1] = experimentId, $[2] = experimentNameOverride, $[3] = inputId, $[4] = onChange, $[5] = variantNameOverride, $[6] = t0) : t0 = $[6];
183
- const actionProps = t0;
184
- let t1;
185
- $[7] !== props.actions ? (t1 = props.actions || [], $[7] = props.actions, $[8] = t1) : t1 = $[8];
186
- const oldActions = t1;
187
- let t2;
188
- $[9] !== actionProps ? (t2 = createActions(actionProps), $[9] = actionProps, $[10] = t2) : t2 = $[10];
189
- let t3;
190
- $[11] !== oldActions || $[12] !== t2 ? (t3 = [t2, ...oldActions], $[11] = oldActions, $[12] = t2, $[13] = t3) : t3 = $[13];
191
- const memoizedActions = t3;
192
- let t4;
193
- $[14] !== memoizedActions || $[15] !== props ? (t4 = {
194
- ...props,
195
- actions: memoizedActions
196
- }, $[14] = memoizedActions, $[15] = props, $[16] = t4) : t4 = $[16];
197
- const withActionProps = t4;
198
- let t5;
199
- return $[17] !== props.renderDefault || $[18] !== withActionProps ? (t5 = props.renderDefault(withActionProps), $[17] = props.renderDefault, $[18] = withActionProps, $[19] = t5) : t5 = $[19], t5;
200
- }, Select = (props) => {
201
- const $ = c(12), {
202
- value,
203
- onChange,
204
- elementProps,
205
- listOptions,
206
- handleChange
207
- } = props;
208
- let t0;
209
- $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t0 = [3, 3, 4], $[0] = t0) : t0 = $[0];
210
- const t1 = value || "";
211
- let t2;
212
- $[1] !== handleChange || $[2] !== onChange ? (t2 = (event) => handleChange(event, onChange), $[1] = handleChange, $[2] = onChange, $[3] = t2) : t2 = $[3];
213
- let t3;
214
- $[4] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t3 = /* @__PURE__ */ jsx("option", { value: "", children: "Select an option..." }), $[4] = t3) : t3 = $[4];
215
- let t4;
216
- $[5] !== listOptions ? (t4 = listOptions.map(_temp$1), $[5] = listOptions, $[6] = t4) : t4 = $[6];
217
- let t5;
218
- return $[7] !== elementProps || $[8] !== t1 || $[9] !== t2 || $[10] !== t4 ? (t5 = /* @__PURE__ */ jsxs(Select$1, { ...elementProps, fontSize: 2, padding: 3, gap: t0, value: t1, onChange: t2, children: [
219
- t3,
220
- t4
221
- ] }), $[7] = elementProps, $[8] = t1, $[9] = t2, $[10] = t4, $[11] = t5) : t5 = $[11], t5;
222
- };
223
- function _temp$1(t0) {
224
- const {
225
- value: optionValue,
226
- title
227
- } = t0;
228
- return /* @__PURE__ */ jsx("option", { value: optionValue, children: title }, optionValue);
229
- }
230
- const formatlistOptions = (experiments) => experiments.map((experiment) => ({
231
- title: experiment.label,
232
- value: experiment.id
233
- })), ExperimentInput = (props) => {
234
- const $ = c(20), {
235
- experiments
236
- } = useExperimentContext();
237
- let t0;
238
- $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t0 = ["_id"], $[0] = t0) : t0 = $[0];
239
- const id = useFormValue(t0);
240
- let t1;
241
- $[1] !== props.path || $[2] !== props.variantNameOverride ? (t1 = [...props.path.slice(0, -1), `${props.variantNameOverride}s`], $[1] = props.path, $[2] = props.variantNameOverride, $[3] = t1) : t1 = $[3];
242
- const additionalChangePath = t1, subValues = useFormValue(additionalChangePath);
243
- let t2;
244
- $[4] !== id ? (t2 = getPublishedId(id), $[4] = id, $[5] = t2) : t2 = $[5];
245
- const {
246
- patch
247
- } = useDocumentOperation(t2, props.schemaType.name);
248
- let t3;
249
- $[6] !== additionalChangePath || $[7] !== patch || $[8] !== subValues ? (t3 = (event, onChange) => {
250
- const inputValue = event.currentTarget.value;
251
- if (onChange(inputValue ? set(inputValue) : unset()), subValues) {
252
- const patchEvent = {
253
- unset: [additionalChangePath.join(".")]
254
- };
255
- patch.execute([patchEvent]);
256
- }
257
- }, $[6] = additionalChangePath, $[7] = patch, $[8] = subValues, $[9] = t3) : t3 = $[9];
258
- const handleChange = t3;
259
- if (!experiments.length) {
260
- let t42;
261
- $[10] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t42 = [3, 3, 4], $[10] = t42) : t42 = $[10];
262
- let t52;
263
- $[11] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t52 = [2, 2, 3], $[11] = t52) : t52 = $[11];
264
- let t6;
265
- return $[12] !== props.experimentNameOverride ? (t6 = /* @__PURE__ */ jsx(Card, { padding: t42, radius: 2, shadow: 1, tone: "caution", children: /* @__PURE__ */ jsxs(Text, { align: "center", size: t52, children: [
266
- "There are no defined ",
267
- props.experimentNameOverride,
268
- "s"
269
- ] }) }), $[12] = props.experimentNameOverride, $[13] = t6) : t6 = $[13], t6;
270
- }
271
- let t4;
272
- $[14] !== experiments ? (t4 = formatlistOptions(experiments), $[14] = experiments, $[15] = t4) : t4 = $[15];
273
- let t5;
274
- return $[16] !== handleChange || $[17] !== props || $[18] !== t4 ? (t5 = /* @__PURE__ */ jsx(Select, { ...props, listOptions: t4, handleChange }), $[16] = handleChange, $[17] = props, $[18] = t4, $[19] = t5) : t5 = $[19], t5;
275
- }, ExperimentItem = (props) => {
276
- const {
277
- active
278
- } = props.value;
279
- return active || props.inputProps.onChange(set(!0, ["active"])), props.renderDefault(props);
280
- }, VariantInput = (props) => {
281
- const $ = c(13);
282
- let t0, t1;
283
- if ($[0] !== props.path) {
284
- const experimentPath = props.path.slice(0, -2);
285
- t0 = useFormValue, t1 = [...experimentPath, "default"], $[0] = props.path, $[1] = t0, $[2] = t1;
286
- } else
287
- t0 = $[1], t1 = $[2];
288
- const defaultValue = t0(t1);
289
- let t2;
290
- $[3] !== defaultValue || $[4] !== props ? (t2 = () => {
291
- props.onChange(set(defaultValue, ["value"]));
292
- }, $[3] = defaultValue, $[4] = props, $[5] = t2) : t2 = $[5];
293
- const handleClick = t2;
294
- let t3;
295
- $[6] !== props ? (t3 = props.renderDefault(props), $[6] = props, $[7] = t3) : t3 = $[7];
296
- let t4;
297
- $[8] !== handleClick ? (t4 = /* @__PURE__ */ jsx(Inline, { gap: 1, children: /* @__PURE__ */ jsx(Button, { text: "Copy default", mode: "ghost", onClick: () => handleClick() }) }), $[8] = handleClick, $[9] = t4) : t4 = $[9];
298
- let t5;
299
- return $[10] !== t3 || $[11] !== t4 ? (t5 = /* @__PURE__ */ jsxs(Stack, { gap: 3, children: [
300
- t3,
301
- t4
302
- ] }), $[10] = t3, $[11] = t4, $[12] = t5) : t5 = $[12], t5;
303
- }, VariantPreview = (props) => {
304
- const $ = c(25), [subtitle, setSubtitle] = useState(void 0), [title, setTitle] = useState(void 0), [media, setMedia] = useState(void 0);
305
- let t0;
306
- $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t0 = {
307
- apiVersion: "2025-01-01"
308
- }, $[0] = t0) : t0 = $[0];
309
- const client = useClient(t0), {
310
- experiments
311
- } = useExperimentContext(), {
312
- experiment,
313
- variant,
314
- value
315
- } = props;
316
- let selectedExperiment, t1;
317
- if ($[1] !== experiment || $[2] !== experiments || $[3] !== variant) {
318
- let t22;
319
- $[6] !== experiment ? (t22 = (experimentItem) => experimentItem.id === experiment, $[6] = experiment, $[7] = t22) : t22 = $[7], selectedExperiment = experiments.find(t22), t1 = selectedExperiment?.variants.find((variantItem) => variantItem.id === variant), $[1] = experiment, $[2] = experiments, $[3] = variant, $[4] = selectedExperiment, $[5] = t1;
320
- } else
321
- selectedExperiment = $[4], t1 = $[5];
322
- const selectedVariant = t1;
323
- let t2;
324
- $[8] !== client || $[9] !== props.schemaType || $[10] !== selectedExperiment?.label || $[11] !== selectedVariant?.label || $[12] !== value ? (t2 = () => {
325
- (async () => {
326
- if (setTitle(`${selectedExperiment?.label} - ${selectedVariant?.label}`), typeof value == "string")
327
- return setSubtitle(value);
328
- if (isReference(value)) {
329
- const doc = await client.getDocument(value._ref), referenceType = (props.schemaType.fields.find(_temp)?.type).to.find((field_0) => field_0.type?.name === doc?._type), selectFields = {}, previewFields = referenceType?.preview?.select || {};
330
- Object.keys(previewFields).forEach((key) => {
331
- const valueKey = referenceType?.preview?.select?.[key];
332
- selectFields[key] = valueKey && doc ? valueKey?.split(".").reduce(_temp2, doc) : void 0;
333
- });
334
- const previewContent = referenceType?.preview?.prepare?.(selectFields);
335
- return setMedia(previewContent?.media || selectFields.media), setSubtitle(previewContent?.title || selectFields.title);
336
- }
337
- return isImage(value) && setMedia(value), "";
338
- })();
339
- }, $[8] = client, $[9] = props.schemaType, $[10] = selectedExperiment?.label, $[11] = selectedVariant?.label, $[12] = value, $[13] = t2) : t2 = $[13];
340
- const t3 = selectedExperiment?.label, t4 = selectedVariant?.label;
341
- let t5;
342
- $[14] !== client || $[15] !== props.schemaType || $[16] !== t3 || $[17] !== t4 || $[18] !== value ? (t5 = [value, client, t3, t4, props.schemaType], $[14] = client, $[15] = props.schemaType, $[16] = t3, $[17] = t4, $[18] = value, $[19] = t5) : t5 = $[19], useEffect(t2, t5);
343
- let t6;
344
- if ($[20] !== media || $[21] !== props || $[22] !== subtitle || $[23] !== title) {
345
- const previewProps = {
346
- ...props,
347
- title,
348
- subtitle,
349
- media
350
- };
351
- t6 = props.renderDefault(previewProps), $[20] = media, $[21] = props, $[22] = subtitle, $[23] = title, $[24] = t6;
352
- } else
353
- t6 = $[24];
354
- return t6;
355
- };
356
- function _temp(field) {
357
- return field.name === "value";
358
- }
359
- function _temp2(acc, index) {
360
- return acc[index];
361
- }
362
- function flattenSchemaType(schemaType) {
363
- return isDocumentSchemaType(schemaType) ? extractInnerFields(schemaType.fields, [], 5) : (console.error("Schema type is not a document"), []);
364
- }
365
- function extractInnerFields(fields, path, maxDepth) {
366
- if (path.length >= maxDepth)
367
- return [];
368
- const result = [];
369
- for (const field of fields)
370
- if (result.push({
371
- path: [...path, field.name],
372
- ...field
373
- }), field.type.jsonType === "object")
374
- result.push(...extractInnerFields(field.type.fields, [...path, field.name], maxDepth));
375
- else if (field.type.jsonType === "array") {
376
- const arrayTypes = field.type.of || [];
377
- for (const arrayType of arrayTypes)
378
- "fields" in arrayType && result.push(...extractInnerFields(arrayType.fields, [...path, field.name], maxDepth));
379
- }
380
- return result;
381
- }
382
- const createExperimentType = ({
383
- field,
384
- experimentNameOverride,
385
- variantNameOverride,
386
- variantId,
387
- variantArrayName,
388
- experimentId
389
- }) => {
390
- const typeName = typeof field == "string" ? field : field.name, usedName = String(typeName[0]).toUpperCase() + typeName.slice(1), variantName = `${variantNameOverride}${usedName}`;
391
- return defineType({
392
- name: `${experimentNameOverride}${usedName}`,
393
- type: "object",
394
- components: {
395
- field: (props) => /* @__PURE__ */ jsx(ExperimentField, { ...props, experimentId, experimentNameOverride, variantNameOverride }),
396
- item: ExperimentItem
397
- },
398
- fields: [typeof field == "string" ? (
399
- // Define a simple field if all we have is the name as a string
400
- defineField({
401
- name: "default",
402
- type: field
403
- })
404
- ) : (
405
- // Pass in the configured options, but overwrite the name
406
- {
407
- ...field,
408
- name: "default"
409
- }
410
- ), defineField({
411
- name: "active",
412
- type: "boolean",
413
- hidden: !0,
414
- initialValue: !1
415
- }), defineField({
416
- name: experimentId,
417
- type: "string",
418
- components: {
419
- input: (props) => /* @__PURE__ */ jsx(ExperimentInput, { ...props, experimentNameOverride, variantNameOverride })
420
- },
421
- hidden: ({
422
- parent
423
- }) => !parent?.active
424
- }), defineField({
425
- name: variantArrayName,
426
- type: "array",
427
- hidden: ({
428
- parent
429
- }) => !parent?.[experimentId],
430
- components: {
431
- input: (props) => /* @__PURE__ */ jsx(ArrayInput, { ...props, variantName, variantId, experimentId })
432
- },
433
- of: [defineField({
434
- name: variantName,
435
- type: variantName
436
- })]
437
- })],
438
- preview: {
439
- select: {
440
- base: "default",
441
- experiment: experimentId
442
- },
443
- prepare: ({
444
- base,
445
- experiment
446
- }) => {
447
- const title = base?.title || base?.name || typeof base == "string" ? base : "", experimentTitle = experiment ? `Experiment: ${experiment}` : "", media = base?.image || base?.photo || base?.media || "";
448
- return {
449
- title: title || experimentTitle,
450
- subtitle: title ? experimentTitle : "",
451
- media
452
- };
453
- }
454
- }
455
- });
456
- }, createVariantType = ({
457
- field,
458
- variantNameOverride,
459
- variantId,
460
- experimentId
461
- }) => {
462
- const typeName = typeof field == "string" ? field : field.name, usedName = String(typeName[0]).toUpperCase() + typeName.slice(1);
463
- return defineType({
464
- name: `${variantNameOverride}${usedName}`,
465
- title: `${variantNameOverride} array ${usedName}`,
466
- type: "object",
467
- components: {
468
- preview: VariantPreview,
469
- input: VariantInput
470
- },
471
- fields: [{
472
- type: "string",
473
- name: variantId,
474
- readOnly: !0
475
- }, {
476
- type: "string",
477
- name: experimentId,
478
- hidden: !0
479
- }, typeof field == "string" ? (
480
- // Define a simple field if all we have is the name as a string
481
- defineField({
482
- name: "value",
483
- type: field
484
- // hidden: ({parent}) => !parent?.[`${objectNameOverride}Id`],
485
- })
486
- ) : (
487
- // Pass in the configured options, but overwrite the name
488
- {
489
- ...field,
490
- name: "value"
491
- // hidden: ({parent}) => !parent?.[`${objectNameOverride}Id`],
492
- }
493
- )],
494
- preview: {
495
- select: {
496
- variant: variantId,
497
- experiment: experimentId,
498
- value: "value"
499
- }
500
- }
501
- });
502
- }, fieldSchema = ({
503
- fields,
504
- experimentNameOverride,
505
- variantNameOverride,
506
- variantId,
507
- variantArrayName,
508
- experimentId
509
- }) => [...fields.map((field) => createVariantType({
510
- field,
511
- variantNameOverride,
512
- variantId,
513
- experimentId
514
- })), ...fields.map((field) => createExperimentType({
515
- field,
516
- experimentNameOverride,
517
- variantNameOverride,
518
- variantId,
519
- variantArrayName,
520
- experimentId
521
- }))], fieldLevelExperiments = definePlugin((config) => {
522
- const pluginConfig = {
523
- ...CONFIG_DEFAULT,
524
- ...config
525
- }, {
526
- fields,
527
- experimentNameOverride,
528
- variantNameOverride
529
- } = pluginConfig, experimentId = `${experimentNameOverride}Id`, variantArrayName = `${variantNameOverride}s`, variantId = `${variantNameOverride}Id`;
530
- return {
531
- name: "sanity-personalistaion-plugin-field-level-experiments",
532
- schema: {
533
- types: fieldSchema({
534
- fields,
535
- experimentNameOverride,
536
- variantNameOverride,
537
- variantId,
538
- variantArrayName,
539
- experimentId
540
- })
541
- },
542
- form: {
543
- components: {
544
- input: (props) => {
545
- if (!(props.id === "root" && isObjectInputProps(props)) || !flattenSchemaType(props.schemaType).some((field) => field.type.name.startsWith(experimentNameOverride) || field.name.startsWith(experimentNameOverride)))
546
- return props.renderDefault(props);
547
- const providerProps = {
548
- ...props,
549
- experimentFieldPluginConfig: {
550
- ...pluginConfig,
551
- variantId,
552
- variantArrayName,
553
- experimentId
554
- }
555
- };
556
- return ExperimentProvider(providerProps);
557
- }
558
- }
559
- }
560
- };
561
- });
1
+ import { fieldLevelExperiments, flattenSchemaType } from "./_chunks-es/fieldExperiments.js";
562
2
  export {
563
3
  fieldLevelExperiments,
564
4
  flattenSchemaType