@sanity/personalization-plugin
3.1.83.1.9
dist/index.js.map~
dist/index.js.mapModified+1−1
Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["{apiVersion: personalizationFieldPluginConfig.apiVersion}","apiVersion","Array.isArray(personalizationFieldPluginConfig.segments)\n ? personalizationFieldPluginConfig.segments\n : suspend(\n async () => {\n if (typeof personalizationFieldPluginConfig.segments === 'function') {\n return personalizationFieldPluginConfig.segments(client)\n }\n return personalizationFieldPluginConfig.segments\n },\n [workspace, 'field-level-personalization'],\n {equal},\n )","personalizationFieldPluginConfig.segments","{...personalizationFieldPluginConfig, segments}","useMemo(\n () => ({...personalizationFieldPluginConfig, segments}),\n [personalizationFieldPluginConfig, segments],\n )","props.renderDefault(props)","props.renderDefault","<PersonalizationContext.Provider value={context}>\n {props.renderDefault(props)}\n </PersonalizationContext.Provider>","PersonalizationContext.Provider","_c","async (segment: VariantType) => {\n const item = {\n _key: uuid(),\n [segmentId]: segment.id,\n _type: segmentName,\n }\n\n // Patch the document\n onItemAppend(item)\n }","useCallback(\n async (segment: VariantType) => {\n const item = {\n _key: uuid(),\n [segmentId]: segment.id,\n _type: segmentName,\n }\n\n // Patch the document\n onItemAppend(item)\n },\n [segmentId, segmentName, onItemAppend],\n )","(props.value as Value[]) || []","value","Inline","Stack","1","segments.map((segment) => {\n return (\n <Button\n key={segment.id}\n text={`Add ${segment.label}`}\n mode=\"ghost\"\n disabled={usedSegments?.includes(segment.id)}\n onClick={() => handleClick(segment)}\n />\n )\n })","3","props.renderDefault({...props, arrayFunctions: () => null})","values?.map","segment","() => null","<Inline gap={1}>\n {segments.map((segment) => {\n return (\n <Button\n key={segment.id}\n text={`Add ${segment.label}`}\n mode=\"ghost\"\n disabled={usedSegments?.includes(segment.id)}\n onClick={() => handleClick(segment)}\n />\n )\n })}\n </Inline>","<Stack gap={3}>\n {props.renderDefault({...props, arrayFunctions: () => null})}\n\n <Inline gap={1}>\n {segments.map((segment) => {\n return (\n <Button\n key={segment.id}\n text={`Add ${segment.label}`}\n mode=\"ghost\"\n disabled={usedSegments?.includes(segment.id)}\n onClick={() => handleClick(segment)}\n />\n )\n })}\n </Inline>\n </Stack>","_c","_temp","() => {\n onChange([set(!active, ['active'])])\n }","useCallback(() => {\n onChange([set(!active, ['active'])])\n }, [onChange, active])","{\n title: `Add ${personalizationNameOverride}`,\n type: 'action',\n icon: IoMdPeople,\n onAction: handleAddAction,\n renderAsButton: true,\n }","`Add ${personalizationNameOverride}`","() => {\n const activeId = ['active']\n const segments = [`${segmentNameOverride}s`]\n onChange([set(!active, activeId), unset(segments)])\n }","useCallback(() => {\n const activeId = ['active']\n const segments = [`${segmentNameOverride}s`]\n onChange([set(!active, activeId), unset(segments)])\n }, [onChange, active, segmentNameOverride])","{\n title: `Remove ${personalizationNameOverride}`,\n type: 'action',\n icon: CloseIcon,\n onAction: handleClearAction,\n renderAsButton: true,\n }","`Remove ${personalizationNameOverride}`","{\n onChange,\n inputId,\n active,\n personalizationNameOverride,\n segmentNameOverride,\n }","useMemo(\n () => ({\n onChange,\n inputId,\n active,\n personalizationNameOverride,\n segmentNameOverride,\n }),\n [onChange, inputId, active, personalizationNameOverride, segmentNameOverride],\n )","props.actions || []","actions","createActions(actionProps)","[createActions(actionProps), ...oldActions]","useMemo(() => {\n const oldActions = props.actions || []\n return [createActions(actionProps), ...oldActions]\n }, [actionProps, props.actions])","clearChildrenGroups(props)","{\n ...propsWithClearedGroups,\n actions: memoizedActions,\n }","useMemo(() => {\n const propsWithClearedGroups = clearChildrenGroups(props)\n return {\n ...propsWithClearedGroups,\n actions: memoizedActions,\n }\n }, [props, memoizedActions])","props.renderDefault(enhancedProps)","renderDefault","_c","useFormValue","[...personalizationPath, 'default']","path","() => {\n props.onChange(set(defaultValue, ['value']))\n }","props.renderDefault(props)","props.renderDefault","<Inline gap={1}>\n <Button text=\"Copy default\" mode=\"ghost\" onClick={() => handleClick()} />\n </Inline>","<Stack gap={3}>\n {props.renderDefault(props)}\n\n <Inline gap={1}>\n <Button text=\"Copy default\" mode=\"ghost\" onClick={() => handleClick()} />\n </Inline>\n </Stack>","_c","{apiVersion}","segments.find((segmentItem) => {\n return segmentItem.id === segment\n })","(segmentItem) => {\n return segmentItem.id === segment\n }","() => {\n const getSubtitle = async () => {\n setTitle(selectedSegment?.label)\n if (typeof value === 'string') {\n return setSubtitle(value)\n }\n if (isReference(value)) {\n const doc = await client.getDocument(value._ref)\n const type = props.schemaType as ObjectSchemaType\n const valueField = type.fields.find((field) => field.name === 'value') as ObjectSchemaType\n const referenceField = valueField?.type as ReferenceSchemaType\n const referenceType = referenceField.to.find((field) => field.type?.name === doc?._type)\n\n const selectFields = {} as Record<string, unknown>\n const previewFields = referenceType?.preview?.select || {}\n Object.keys(previewFields).forEach((key) => {\n const valueKey = referenceType?.preview?.select?.[key]\n selectFields[key] =\n valueKey && doc\n ? valueKey.split('.').reduce((acc: any, index) => acc?.[index], doc)\n : undefined\n })\n\n const previewContent = referenceType?.preview?.prepare?.(selectFields)\n setMedia(previewContent?.media || selectFields['media'])\n return setSubtitle(previewContent?.title || (selectFields['title'] as string))\n }\n if (isImage(value)) {\n setMedia(value)\n }\n return ''\n }\n void getSubtitle()\n }","schemaType","label","(field) => field.name === 'value'","field","(acc: any, index) => acc?.[index]","[value, client, selectedSegment?.label, props.schemaType]","selectedSegment?.label","props.renderDefault(previewProps)","_c","\"active\"","\"media\"","\"title\""],"sources":["../src/components/personalization/Context.tsx","../src/components/personalization/Array.tsx","../src/components/personalization/Field.tsx","../src/components/personalization/SegmentInput.tsx","../src/components/personalization/SegmentPreview.tsx","../src/fieldPersonalization.tsx"],"sourcesContent":["import {dequal as equal} from 'dequal/lite'\nimport {createContext, useContext, useMemo} from 'react'\nimport {type ObjectInputProps, useClient, useWorkspace} from 'sanity'\nimport {suspend} from 'suspend-react'\n\nimport type {PersonalizationContextProps, PersonalizationFieldPluginConfig} from '../../types'\n\n// This provider makes the plugin config available to all components in the document form\n// But with segments resolved\n\nexport const CONFIG_DEFAULT = {\n fields: [],\n apiVersion: '2024-11-07',\n personalizationNameOverride: 'personalization',\n segmentNameOverride: 'segment',\n segmentId: 'segmentId',\n segmentArrayName: 'segments',\n}\n\nconst PersonalizationContext = createContext<PersonalizationContextProps>({\n ...CONFIG_DEFAULT,\n segments: [],\n})\n\nexport function usePersonalizationContext() {\n return useContext(PersonalizationContext)\n}\n\ntype PersonalizationProps = ObjectInputProps & {\n personalizationFieldPluginConfig: Required<PersonalizationFieldPluginConfig>\n}\n\nexport function PersonalizationProvider(props: PersonalizationProps) {\n const {personalizationFieldPluginConfig} = props\n\n const client = useClient({apiVersion: personalizationFieldPluginConfig.apiVersion})\n const workspace = useWorkspace()\n\n // Fetch or return segments\n const segments = Array.isArray(personalizationFieldPluginConfig.segments)\n ? personalizationFieldPluginConfig.segments\n : suspend(\n async () => {\n if (typeof personalizationFieldPluginConfig.segments === 'function') {\n return personalizationFieldPluginConfig.segments(client)\n }\n return personalizationFieldPluginConfig.segments\n },\n [workspace, 'field-level-personalization'],\n {equal},\n )\n\n const context = useMemo(\n () => ({...personalizationFieldPluginConfig, segments}),\n [personalizationFieldPluginConfig, segments],\n )\n\n return (\n <PersonalizationContext.Provider value={context}>\n {props.renderDefault(props)}\n </PersonalizationContext.Provider>\n )\n}\n","import {Button, Inline, Stack} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback} from 'react'\n\nimport type {PersonalizationArrayInputProps, VariantType} from '../../types'\nimport {usePersonalizationContext} from './Context'\n\nexport const ArrayInput = (props: PersonalizationArrayInputProps) => {\n const {onItemAppend, segmentName, segmentId} = props\n\n const {segments} = usePersonalizationContext()\n\n const handleClick = useCallback(\n async (segment: VariantType) => {\n const item = {\n _key: uuid(),\n [segmentId]: segment.id,\n _type: segmentName,\n }\n\n // Patch the document\n onItemAppend(item)\n },\n [segmentId, segmentName, onItemAppend],\n )\n\n type Value = {\n value?: unknown\n [key: string]: unknown\n segmentId: string\n _key: string\n _type: string\n }\n\n const values = (props.value as Value[]) || []\n\n const usedSegments = values?.map((segment) => segment[segmentId])\n\n return (\n <Stack gap={3}>\n {props.renderDefault({...props, arrayFunctions: () => null})}\n\n <Inline gap={1}>\n {segments.map((segment) => {\n return (\n <Button\n key={segment.id}\n text={`Add ${segment.label}`}\n mode=\"ghost\"\n disabled={usedSegments?.includes(segment.id)}\n onClick={() => handleClick(segment)}\n />\n )\n })}\n </Inline>\n </Stack>\n )\n}\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {useCallback, useMemo} from 'react'\nimport {IoMdPeople} from 'react-icons/io'\nimport {\n defineDocumentFieldAction,\n type DocumentFieldActionItem,\n type DocumentFieldActionProps,\n type FormPatch,\n type ObjectFieldProps,\n type PatchEvent,\n set,\n unset,\n} from 'sanity'\n\nimport {clearChildrenGroups} from '../../utils/clearChildGroups'\n\ntype PatchStuff = {onChange: (patch: FormPatch | FormPatch[] | PatchEvent) => void; inputId: string}\n\nconst useAddPersonalizationAction = (\n props: DocumentFieldActionProps &\n PatchStuff & {personalizationNameOverride: string; active: boolean},\n): DocumentFieldActionItem => {\n const {onChange, active, personalizationNameOverride} = props\n\n const handleAddAction = useCallback(() => {\n onChange([set(!active, ['active'])])\n }, [onChange, active])\n\n return {\n title: `Add ${personalizationNameOverride}`,\n type: 'action',\n icon: IoMdPeople,\n onAction: handleAddAction,\n renderAsButton: true,\n }\n}\n\nconst useRemovePersonalizationAction = (\n props: DocumentFieldActionProps &\n PatchStuff & {\n personalizationNameOverride: string\n active: boolean\n segmentNameOverride: string\n },\n): DocumentFieldActionItem => {\n const {onChange, active, personalizationNameOverride, segmentNameOverride} = props\n const handleClearAction = useCallback(() => {\n const activeId = ['active']\n const segments = [`${segmentNameOverride}s`]\n onChange([set(!active, activeId), unset(segments)])\n }, [onChange, active, segmentNameOverride])\n\n return {\n title: `Remove ${personalizationNameOverride}`,\n type: 'action',\n icon: CloseIcon,\n onAction: handleClearAction,\n renderAsButton: true,\n }\n}\n\nconst createActions = ({\n onChange,\n inputId,\n active,\n personalizationNameOverride,\n segmentNameOverride,\n}: PatchStuff & {\n active?: boolean\n personalizationNameOverride: string\n segmentNameOverride: string\n}) => {\n const removeAction = defineDocumentFieldAction({\n name: `Remove ${personalizationNameOverride}`,\n useAction: (props) =>\n useRemovePersonalizationAction({\n ...props,\n active: true,\n onChange,\n inputId,\n personalizationNameOverride,\n segmentNameOverride,\n }),\n })\n const addAction = defineDocumentFieldAction({\n name: `Add ${personalizationNameOverride}`,\n useAction: (props) =>\n useAddPersonalizationAction({\n ...props,\n active: false,\n onChange,\n inputId,\n personalizationNameOverride,\n }),\n })\n return active ? removeAction : addAction\n}\n\nexport const Field = (\n props: ObjectFieldProps & {\n personalizationNameOverride: string\n segmentNameOverride: string\n },\n) => {\n const {onChange} = props.inputProps\n const {inputId, personalizationNameOverride, segmentNameOverride} = props\n const active = props.value?.['active'] as boolean | undefined\n\n const actionProps = useMemo(\n () => ({\n onChange,\n inputId,\n active,\n personalizationNameOverride,\n segmentNameOverride,\n }),\n [onChange, inputId, active, personalizationNameOverride, segmentNameOverride],\n )\n\n const memoizedActions = useMemo(() => {\n const oldActions = props.actions || []\n return [createActions(actionProps), ...oldActions]\n }, [actionProps, props.actions])\n\n const enhancedProps = useMemo(() => {\n const propsWithClearedGroups = clearChildrenGroups(props)\n return {\n ...propsWithClearedGroups,\n actions: memoizedActions,\n }\n }, [props, memoizedActions])\n\n return props.renderDefault(enhancedProps)\n}\n","import {Button, Inline, Stack} from '@sanity/ui'\nimport {type ObjectInputProps, set, useFormValue} from 'sanity'\n\nexport const SegmentInput = (props: ObjectInputProps) => {\n const personalizationPath = props.path.slice(0, -2)\n const defaultValue = useFormValue([...personalizationPath, 'default'])\n const handleClick = () => {\n props.onChange(set(defaultValue, ['value']))\n }\n return (\n <Stack gap={3}>\n {props.renderDefault(props)}\n\n <Inline gap={1}>\n <Button text=\"Copy default\" mode=\"ghost\" onClick={() => handleClick()} />\n </Inline>\n </Stack>\n )\n}\n","import {useEffect, useState} from 'react'\nimport {\n isImage,\n isReference,\n type ObjectSchemaType,\n type PreviewProps,\n type ReferenceSchemaType,\n useClient,\n} from 'sanity'\n\nimport type {VariantPreviewProps} from '../../types'\nimport {usePersonalizationContext} from './Context'\n\nexport const SegmentPreview = (props: PreviewProps) => {\n const [subtitle, setSubtitle] = useState<string | undefined>(undefined)\n const [title, setTitle] = useState<string | undefined>(undefined)\n const [media, setMedia] = useState<any>(undefined)\n const {segments, apiVersion} = usePersonalizationContext()\n const client = useClient({apiVersion})\n\n const {segment, value} = props as VariantPreviewProps\n\n const selectedSegment = segments.find((segmentItem) => {\n return segmentItem.id === segment\n })\n\n useEffect(() => {\n const getSubtitle = async () => {\n setTitle(selectedSegment?.label)\n if (typeof value === 'string') {\n return setSubtitle(value)\n }\n if (isReference(value)) {\n const doc = await client.getDocument(value._ref)\n const type = props.schemaType as ObjectSchemaType\n const valueField = type.fields.find((field) => field.name === 'value') as ObjectSchemaType\n const referenceField = valueField?.type as ReferenceSchemaType\n const referenceType = referenceField.to.find((field) => field.type?.name === doc?._type)\n\n const selectFields = {} as Record<string, unknown>\n const previewFields = referenceType?.preview?.select || {}\n Object.keys(previewFields).forEach((key) => {\n const valueKey = referenceType?.preview?.select?.[key]\n selectFields[key] =\n valueKey && doc\n ? valueKey.split('.').reduce((acc: any, index) => acc?.[index], doc)\n : undefined\n })\n\n const previewContent = referenceType?.preview?.prepare?.(selectFields)\n setMedia(previewContent?.media || selectFields['media'])\n return setSubtitle(previewContent?.title || (selectFields['title'] as string))\n }\n if (isImage(value)) {\n setMedia(value)\n }\n return ''\n }\n void getSubtitle()\n }, [value, client, selectedSegment?.label, props.schemaType])\n\n const previewProps = {\n ...props,\n title: title,\n subtitle: subtitle,\n media: media,\n }\n\n return props.renderDefault(previewProps)\n}\n","import {\n type ArrayOfObjectsInputProps,\n defineField,\n definePlugin,\n defineType,\n type FieldDefinition,\n isObjectInputProps,\n} from 'sanity'\n\nimport {ArrayItem} from './components/ArrayItem'\nimport {\n ArrayInput,\n CONFIG_DEFAULT,\n Field,\n PersonalizationProvider,\n SegmentInput,\n SegmentPreview,\n} from './components/personalization'\nimport type {PersonalizationFieldPluginConfig} from './types'\nimport {flattenSchemaType} from './utils/flattenSchemaType'\n\nconst createPersonalizationType = ({\n field,\n personalizationNameOverride,\n segmentNameOverride,\n segmentId,\n segmentArrayName,\n}: {\n field: string | FieldDefinition\n personalizationNameOverride: string\n segmentNameOverride: string\n segmentId: string\n segmentArrayName: string\n}) => {\n const typeName = typeof field === `string` ? field : field.name\n const usedName = String(typeName[0]).toUpperCase() + typeName.slice(1)\n const segmentName = `${segmentNameOverride}${usedName}`\n\n return defineType({\n name: `${personalizationNameOverride}${usedName}`,\n type: 'object',\n groups: [\n {\n name: 'default',\n title: 'Default',\n hidden: ({parent}) => {\n return !Array.isArray(parent)\n },\n },\n {\n name: 'personalization',\n title: 'Personalization options',\n hidden: ({parent}) => {\n return !Array.isArray(parent)\n },\n },\n {\n name: 'all-fields',\n title: 'All fields',\n hidden: ({parent}) => {\n return Array.isArray(parent)\n },\n },\n ],\n components: {\n field: (props) => (\n <Field\n {...props}\n personalizationNameOverride={personalizationNameOverride}\n segmentNameOverride={segmentNameOverride}\n />\n ),\n item: ArrayItem,\n },\n fields: [\n typeof field === `string`\n ? // Define a simple field if all we have is the name as a string\n defineField({\n name: 'default',\n type: field,\n group: 'default',\n })\n : // Pass in the configured options, but overwrite the name\n {\n ...field,\n name: 'default',\n group: 'default',\n },\n defineField({\n name: 'active',\n type: 'boolean',\n hidden: true,\n initialValue: false,\n }),\n defineField({\n name: segmentArrayName,\n type: 'array',\n hidden: ({parent}) => {\n return !parent?.active\n },\n group: 'personalization',\n components: {\n input: (props: ArrayOfObjectsInputProps) => (\n <ArrayInput {...props} segmentName={segmentName} segmentId={segmentId} />\n ),\n },\n of: [\n defineField({\n name: segmentName,\n type: segmentName,\n }),\n ],\n }),\n ],\n preview: {\n select: {\n base: 'default',\n },\n prepare: ({base}) => {\n const title =\n typeof base === 'string'\n ? base\n : base && typeof base === 'object'\n ? base.title || base.name || ''\n : ''\n const media =\n base && typeof base === 'object' ? base.image || base.photo || base.media || '' : ''\n return {\n title,\n media,\n }\n },\n },\n })\n}\n\nconst createSegmentType = ({\n field,\n segmentNameOverride,\n segmentId,\n}: {\n field: string | FieldDefinition\n segmentNameOverride: string\n segmentId: string\n}) => {\n const typeName = typeof field === `string` ? field : field.name\n const usedName = String(typeName[0]).toUpperCase() + typeName.slice(1)\n return defineType({\n name: `${segmentNameOverride}${usedName}`,\n title: `${segmentNameOverride} array ${usedName}`,\n type: 'object',\n components: {\n preview: SegmentPreview,\n input: SegmentInput,\n },\n fields: [\n {\n type: 'string',\n name: segmentId,\n readOnly: true,\n },\n typeof field === `string`\n ? // Define a simple field if all we have is the name as a string\n defineField({\n name: 'value',\n type: field,\n })\n : // Pass in the configured options, but overwrite the name\n {\n ...field,\n name: 'value',\n },\n ],\n preview: {\n select: {\n segment: segmentId,\n value: 'value',\n },\n },\n })\n}\n\nconst fieldSchema = ({\n fields,\n personalizationNameOverride,\n segmentNameOverride,\n segmentId,\n segmentArrayName,\n}: Required<Omit<PersonalizationFieldPluginConfig, 'apiVersion' | 'segments'>>) => {\n return [\n ...fields.map((field) => createSegmentType({field, segmentNameOverride, segmentId})),\n ...fields.map((field) =>\n createPersonalizationType({\n field,\n personalizationNameOverride,\n segmentNameOverride,\n segmentId,\n segmentArrayName,\n }),\n ),\n ]\n}\n\nexport const fieldLevelPersonalization = definePlugin<PersonalizationFieldPluginConfig>(\n (config) => {\n const pluginConfig = {...CONFIG_DEFAULT, ...config}\n const {fields, personalizationNameOverride, segmentNameOverride} = pluginConfig\n\n const segmentArrayName = `${segmentNameOverride}s`\n const segmentId = `${segmentNameOverride}Id`\n\n const fieldSchemaConfig = fieldSchema({\n fields,\n personalizationNameOverride,\n segmentNameOverride,\n segmentId,\n segmentArrayName,\n })\n return {\n name: 'sanity-personalization-plugin-field-level-personalization',\n schema: {\n types: fieldSchemaConfig,\n },\n form: {\n components: {\n input: (props) => {\n const isRootInput = props.id === 'root' && isObjectInputProps(props)\n\n if (!isRootInput) {\n return props.renderDefault(props)\n }\n\n const flatFields = flattenSchemaType(props.schemaType)\n const hasPersonalization = flatFields.some(\n (field) =>\n field.type.name.startsWith(personalizationNameOverride) ||\n field.name.startsWith(personalizationNameOverride),\n )\n\n if (!hasPersonalization) {\n return props.renderDefault(props)\n }\n\n const providerProps = {\n ...props,\n personalizationFieldPluginConfig: {\n ...pluginConfig,\n segmentId,\n segmentArrayName,\n },\n }\n return <PersonalizationProvider {...providerProps} />\n },\n },\n },\n }\n },\n)\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["{apiVersion: personalizationFieldPluginConfig.apiVersion}","apiVersion","Array.isArray(personalizationFieldPluginConfig.segments)\n ? personalizationFieldPluginConfig.segments\n : suspend(\n async () => {\n if (typeof personalizationFieldPluginConfig.segments === 'function') {\n return personalizationFieldPluginConfig.segments(client)\n }\n return personalizationFieldPluginConfig.segments\n },\n [workspace, 'field-level-personalization'],\n {equal},\n )","personalizationFieldPluginConfig.segments","{...personalizationFieldPluginConfig, segments}","useMemo(\n () => ({...personalizationFieldPluginConfig, segments}),\n [personalizationFieldPluginConfig, segments],\n )","props.renderDefault(props)","props.renderDefault","<PersonalizationContext.Provider value={context}>\n {props.renderDefault(props)}\n </PersonalizationContext.Provider>","PersonalizationContext.Provider","_c","async (segment: VariantType) => {\n const item = {\n _key: uuid(),\n [segmentId]: segment.id,\n _type: segmentName,\n }\n\n // Patch the document\n onItemAppend(item)\n }","useCallback(\n async (segment: VariantType) => {\n const item = {\n _key: uuid(),\n [segmentId]: segment.id,\n _type: segmentName,\n }\n\n // Patch the document\n onItemAppend(item)\n },\n [segmentId, segmentName, onItemAppend],\n )","(props.value as Value[]) || []","value","Inline","Stack","1","segments.map((segment) => {\n return (\n <Button\n key={segment.id}\n text={`Add ${segment.label}`}\n mode=\"ghost\"\n disabled={usedSegments?.includes(segment.id)}\n onClick={() => handleClick(segment)}\n />\n )\n })","3","props.renderDefault({...props, arrayFunctions: () => null})","values?.map","segment","() => null","<Inline gap={1}>\n {segments.map((segment) => {\n return (\n <Button\n key={segment.id}\n text={`Add ${segment.label}`}\n mode=\"ghost\"\n disabled={usedSegments?.includes(segment.id)}\n onClick={() => handleClick(segment)}\n />\n )\n })}\n </Inline>","<Stack gap={3}>\n {props.renderDefault({...props, arrayFunctions: () => null})}\n\n <Inline gap={1}>\n {segments.map((segment) => {\n return (\n <Button\n key={segment.id}\n text={`Add ${segment.label}`}\n mode=\"ghost\"\n disabled={usedSegments?.includes(segment.id)}\n onClick={() => handleClick(segment)}\n />\n )\n })}\n </Inline>\n </Stack>","_c","_temp","() => {\n onChange([set(!active, ['active'])])\n }","useCallback(() => {\n onChange([set(!active, ['active'])])\n }, [onChange, active])","{\n title: `Add ${personalizationNameOverride}`,\n type: 'action',\n icon: IoMdPeople,\n onAction: handleAddAction,\n renderAsButton: true,\n }","`Add ${personalizationNameOverride}`","() => {\n const activeId = ['active']\n const segments = [`${segmentNameOverride}s`]\n onChange([set(!active, activeId), unset(segments)])\n }","useCallback(() => {\n const activeId = ['active']\n const segments = [`${segmentNameOverride}s`]\n onChange([set(!active, activeId), unset(segments)])\n }, [onChange, active, segmentNameOverride])","{\n title: `Remove ${personalizationNameOverride}`,\n type: 'action',\n icon: CloseIcon,\n onAction: handleClearAction,\n renderAsButton: true,\n }","`Remove ${personalizationNameOverride}`","{\n onChange,\n inputId,\n active,\n personalizationNameOverride,\n segmentNameOverride,\n }","useMemo(\n () => ({\n onChange,\n inputId,\n active,\n personalizationNameOverride,\n segmentNameOverride,\n }),\n [onChange, inputId, active, personalizationNameOverride, segmentNameOverride],\n )","props.actions || []","actions","createActions(actionProps)","[createActions(actionProps), ...oldActions]","useMemo(() => {\n const oldActions = props.actions || []\n return [createActions(actionProps), ...oldActions]\n }, [actionProps, props.actions])","clearChildrenGroups(props)","{\n ...propsWithClearedGroups,\n actions: memoizedActions,\n }","useMemo(() => {\n const propsWithClearedGroups = clearChildrenGroups(props)\n return {\n ...propsWithClearedGroups,\n actions: memoizedActions,\n }\n }, [props, memoizedActions])","props.renderDefault(enhancedProps)","renderDefault","_c","useFormValue","[...personalizationPath, 'default']","path","() => {\n props.onChange(set(defaultValue, ['value']))\n }","props.renderDefault(props)","props.renderDefault","<Inline gap={1}>\n <Button text=\"Copy default\" mode=\"ghost\" onClick={() => handleClick()} />\n </Inline>","<Stack gap={3}>\n {props.renderDefault(props)}\n\n <Inline gap={1}>\n <Button text=\"Copy default\" mode=\"ghost\" onClick={() => handleClick()} />\n </Inline>\n </Stack>","_c","{apiVersion}","segments.find((segmentItem) => {\n return segmentItem.id === segment\n })","(segmentItem) => {\n return segmentItem.id === segment\n }","() => {\n const getSubtitle = async () => {\n setTitle(selectedSegment?.label)\n if (typeof value === 'string') {\n return setSubtitle(value)\n }\n if (isReference(value)) {\n const doc = await client.getDocument(value._ref)\n const type = props.schemaType as ObjectSchemaType\n const valueField = type.fields.find((field) => field.name === 'value') as ObjectSchemaType\n const referenceField = valueField?.type as ReferenceSchemaType\n const referenceType = referenceField.to.find((field) => field.type?.name === doc?._type)\n\n const selectFields = {} as Record<string, unknown>\n const previewFields = referenceType?.preview?.select || {}\n Object.keys(previewFields).forEach((key) => {\n const valueKey = referenceType?.preview?.select?.[key]\n selectFields[key] =\n valueKey && doc\n ? valueKey.split('.').reduce((acc: any, index) => acc?.[index], doc)\n : undefined\n })\n\n const previewContent = referenceType?.preview?.prepare?.(selectFields)\n setMedia(previewContent?.media || selectFields['media'])\n return setSubtitle(previewContent?.title || (selectFields['title'] as string))\n }\n if (isImage(value)) {\n setMedia(value)\n }\n return ''\n }\n void getSubtitle()\n }","schemaType","label","(field) => field.name === 'value'","field","(acc: any, index) => acc?.[index]","[value, client, selectedSegment?.label, props.schemaType]","selectedSegment?.label","props.renderDefault(previewProps)","_c","\"active\"","\"media\"","\"title\""],"sources":["../src/components/personalization/Context.tsx","../src/components/personalization/Array.tsx","../src/components/personalization/Field.tsx","../src/components/personalization/SegmentInput.tsx","../src/components/personalization/SegmentPreview.tsx","../src/fieldPersonalization.tsx"],"sourcesContent":["import {dequal as equal} from 'dequal/lite'\nimport {createContext, useContext, useMemo} from 'react'\nimport {type ObjectInputProps, useClient, useWorkspace} from 'sanity'\nimport {suspend} from 'suspend-react'\n\nimport type {PersonalizationContextProps, PersonalizationFieldPluginConfig} from '../../types'\n\n// This provider makes the plugin config available to all components in the document form\n// But with segments resolved\n\nexport const CONFIG_DEFAULT = {\n fields: [],\n apiVersion: '2024-11-07',\n personalizationNameOverride: 'personalization',\n segmentNameOverride: 'segment',\n segmentId: 'segmentId',\n segmentArrayName: 'segments',\n}\n\nconst PersonalizationContext = createContext<PersonalizationContextProps>({\n ...CONFIG_DEFAULT,\n segments: [],\n})\n\nexport function usePersonalizationContext() {\n return useContext(PersonalizationContext)\n}\n\ntype PersonalizationProps = ObjectInputProps & {\n personalizationFieldPluginConfig: Required<PersonalizationFieldPluginConfig>\n}\n\nexport function PersonalizationProvider(props: PersonalizationProps) {\n const {personalizationFieldPluginConfig} = props\n\n const client = useClient({apiVersion: personalizationFieldPluginConfig.apiVersion})\n const workspace = useWorkspace()\n\n // Fetch or return segments\n const segments = Array.isArray(personalizationFieldPluginConfig.segments)\n ? personalizationFieldPluginConfig.segments\n : suspend(\n async () => {\n if (typeof personalizationFieldPluginConfig.segments === 'function') {\n return personalizationFieldPluginConfig.segments(client)\n }\n return personalizationFieldPluginConfig.segments\n },\n [workspace, 'field-level-personalization'],\n {equal},\n )\n\n const context = useMemo(\n () => ({...personalizationFieldPluginConfig, segments}),\n [personalizationFieldPluginConfig, segments],\n )\n\n return (\n <PersonalizationContext.Provider value={context}>\n {props.renderDefault(props)}\n </PersonalizationContext.Provider>\n )\n}\n","import {Button, Inline, Stack} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback} from 'react'\n\nimport type {PersonalizationArrayInputProps, VariantType} from '../../types'\nimport {usePersonalizationContext} from './Context'\n\nexport const ArrayInput = (props: PersonalizationArrayInputProps) => {\n const {onItemAppend, segmentName, segmentId} = props\n\n const {segments} = usePersonalizationContext()\n\n const handleClick = useCallback(\n async (segment: VariantType) => {\n const item = {\n _key: uuid(),\n [segmentId]: segment.id,\n _type: segmentName,\n }\n\n // Patch the document\n onItemAppend(item)\n },\n [segmentId, segmentName, onItemAppend],\n )\n\n type Value = {\n value?: unknown\n [key: string]: unknown\n segmentId: string\n _key: string\n _type: string\n }\n\n const values = (props.value as Value[]) || []\n\n const usedSegments = values?.map((segment) => segment[segmentId])\n\n return (\n <Stack gap={3}>\n {props.renderDefault({...props, arrayFunctions: () => null})}\n\n <Inline gap={1}>\n {segments.map((segment) => {\n return (\n <Button\n key={segment.id}\n text={`Add ${segment.label}`}\n mode=\"ghost\"\n disabled={usedSegments?.includes(segment.id)}\n onClick={() => handleClick(segment)}\n />\n )\n })}\n </Inline>\n </Stack>\n )\n}\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {useCallback, useMemo} from 'react'\nimport {IoMdPeople} from 'react-icons/io'\nimport {\n defineDocumentFieldAction,\n type DocumentFieldActionItem,\n type DocumentFieldActionProps,\n type FormPatch,\n type ObjectFieldProps,\n type PatchEvent,\n set,\n unset,\n} from 'sanity'\n\nimport {clearChildrenGroups} from '../../utils/clearChildGroups'\n\ntype PatchStuff = {onChange: (patch: FormPatch | FormPatch[] | PatchEvent) => void; inputId: string}\n\nconst useAddPersonalizationAction = (\n props: DocumentFieldActionProps &\n PatchStuff & {personalizationNameOverride: string; active: boolean},\n): DocumentFieldActionItem => {\n const {onChange, active, personalizationNameOverride} = props\n\n const handleAddAction = useCallback(() => {\n onChange([set(!active, ['active'])])\n }, [onChange, active])\n\n return {\n title: `Add ${personalizationNameOverride}`,\n type: 'action',\n icon: IoMdPeople,\n onAction: handleAddAction,\n renderAsButton: true,\n }\n}\n\nconst useRemovePersonalizationAction = (\n props: DocumentFieldActionProps &\n PatchStuff & {\n personalizationNameOverride: string\n active: boolean\n segmentNameOverride: string\n },\n): DocumentFieldActionItem => {\n const {onChange, active, personalizationNameOverride, segmentNameOverride} = props\n const handleClearAction = useCallback(() => {\n const activeId = ['active']\n const segments = [`${segmentNameOverride}s`]\n onChange([set(!active, activeId), unset(segments)])\n }, [onChange, active, segmentNameOverride])\n\n return {\n title: `Remove ${personalizationNameOverride}`,\n type: 'action',\n icon: CloseIcon,\n onAction: handleClearAction,\n renderAsButton: true,\n }\n}\n\nconst createActions = ({\n onChange,\n inputId,\n active,\n personalizationNameOverride,\n segmentNameOverride,\n}: PatchStuff & {\n active?: boolean\n personalizationNameOverride: string\n segmentNameOverride: string\n}) => {\n const removeAction = defineDocumentFieldAction({\n name: `Remove ${personalizationNameOverride}`,\n useAction: (props) =>\n useRemovePersonalizationAction({\n ...props,\n active: true,\n onChange,\n inputId,\n personalizationNameOverride,\n segmentNameOverride,\n }),\n })\n const addAction = defineDocumentFieldAction({\n name: `Add ${personalizationNameOverride}`,\n useAction: (props) =>\n useAddPersonalizationAction({\n ...props,\n active: false,\n onChange,\n inputId,\n personalizationNameOverride,\n }),\n })\n return active ? removeAction : addAction\n}\n\nexport const Field = (\n props: ObjectFieldProps & {\n personalizationNameOverride: string\n segmentNameOverride: string\n },\n) => {\n const {onChange} = props.inputProps\n const {inputId, personalizationNameOverride, segmentNameOverride} = props\n const active = props.value?.['active'] as boolean | undefined\n\n const actionProps = useMemo(\n () => ({\n onChange,\n inputId,\n active,\n personalizationNameOverride,\n segmentNameOverride,\n }),\n [onChange, inputId, active, personalizationNameOverride, segmentNameOverride],\n )\n\n const memoizedActions = useMemo(() => {\n const oldActions = props.actions || []\n return [createActions(actionProps), ...oldActions]\n }, [actionProps, props.actions])\n\n const enhancedProps = useMemo(() => {\n const propsWithClearedGroups = clearChildrenGroups(props)\n return {\n ...propsWithClearedGroups,\n actions: memoizedActions,\n }\n }, [props, memoizedActions])\n\n return props.renderDefault(enhancedProps)\n}\n","import {Button, Inline, Stack} from '@sanity/ui'\nimport {type ObjectInputProps, set, useFormValue} from 'sanity'\n\nexport const SegmentInput = (props: ObjectInputProps) => {\n const personalizationPath = props.path.slice(0, -2)\n const defaultValue = useFormValue([...personalizationPath, 'default'])\n const handleClick = () => {\n props.onChange(set(defaultValue, ['value']))\n }\n return (\n <Stack gap={3}>\n {props.renderDefault(props)}\n\n <Inline gap={1}>\n <Button text=\"Copy default\" mode=\"ghost\" onClick={() => handleClick()} />\n </Inline>\n </Stack>\n )\n}\n","import {useEffect, useState} from 'react'\nimport {\n isImage,\n isReference,\n type ObjectSchemaType,\n type PreviewProps,\n type ReferenceSchemaType,\n useClient,\n} from 'sanity'\n\nimport type {VariantPreviewProps} from '../../types'\nimport {usePersonalizationContext} from './Context'\n\nexport const SegmentPreview = (props: PreviewProps) => {\n const [subtitle, setSubtitle] = useState<string | undefined>(undefined)\n const [title, setTitle] = useState<string | undefined>(undefined)\n const [media, setMedia] = useState<any>(undefined)\n const {segments, apiVersion} = usePersonalizationContext()\n const client = useClient({apiVersion})\n\n const {segment, value} = props as VariantPreviewProps\n\n const selectedSegment = segments.find((segmentItem) => {\n return segmentItem.id === segment\n })\n\n useEffect(() => {\n const getSubtitle = async () => {\n setTitle(selectedSegment?.label)\n if (typeof value === 'string') {\n return setSubtitle(value)\n }\n if (isReference(value)) {\n const doc = await client.getDocument(value._ref)\n const type = props.schemaType as ObjectSchemaType\n const valueField = type.fields.find((field) => field.name === 'value') as ObjectSchemaType\n const referenceField = valueField?.type as ReferenceSchemaType\n const referenceType = referenceField.to.find((field) => field.type?.name === doc?._type)\n\n const selectFields = {} as Record<string, unknown>\n const previewFields = referenceType?.preview?.select || {}\n Object.keys(previewFields).forEach((key) => {\n const valueKey = referenceType?.preview?.select?.[key]\n selectFields[key] =\n valueKey && doc\n ? valueKey.split('.').reduce((acc: any, index) => acc?.[index], doc)\n : undefined\n })\n\n const previewContent = referenceType?.preview?.prepare?.(selectFields)\n setMedia(previewContent?.media || selectFields['media'])\n return setSubtitle(previewContent?.title || (selectFields['title'] as string))\n }\n if (isImage(value)) {\n setMedia(value)\n }\n return ''\n }\n void getSubtitle()\n }, [value, client, selectedSegment?.label, props.schemaType])\n\n const previewProps = {\n ...props,\n title: title,\n subtitle: subtitle,\n media: media,\n }\n\n return props.renderDefault(previewProps)\n}\n","import {\n type ArrayOfObjectsInputProps,\n defineField,\n definePlugin,\n defineType,\n type FieldDefinition,\n isObjectInputProps,\n} from 'sanity'\n\nimport {ArrayItem} from './components/ArrayItem'\nimport {\n ArrayInput,\n CONFIG_DEFAULT,\n Field,\n PersonalizationProvider,\n SegmentInput,\n SegmentPreview,\n} from './components/personalization'\nimport type {PersonalizationFieldPluginConfig} from './types'\nimport {flattenSchemaType} from './utils/flattenSchemaType'\n\nconst createPersonalizationType = ({\n field,\n personalizationNameOverride,\n segmentNameOverride,\n segmentId,\n segmentArrayName,\n}: {\n field: string | FieldDefinition\n personalizationNameOverride: string\n segmentNameOverride: string\n segmentId: string\n segmentArrayName: string\n}) => {\n const typeName = typeof field === `string` ? field : field.name\n const usedName = String(typeName[0]).toUpperCase() + typeName.slice(1)\n const segmentName = `${segmentNameOverride}${usedName}`\n\n return defineType({\n name: `${personalizationNameOverride}${usedName}`,\n type: 'object',\n groups: [\n {\n name: 'default',\n title: 'Default',\n hidden: ({parent}) => {\n return !Array.isArray(parent)\n },\n },\n {\n name: 'personalization',\n title: 'Personalization options',\n hidden: ({parent}) => {\n return !Array.isArray(parent)\n },\n },\n {\n name: 'all-fields',\n title: 'All fields',\n hidden: ({parent}) => {\n return Array.isArray(parent)\n },\n },\n ],\n components: {\n field: (props) => (\n <Field\n {...props}\n personalizationNameOverride={personalizationNameOverride}\n segmentNameOverride={segmentNameOverride}\n />\n ),\n item: ArrayItem,\n },\n fields: [\n typeof field === `string`\n ? // Define a simple field if all we have is the name as a string\n defineField({\n name: 'default',\n type: field,\n group: 'default',\n })\n : // Pass in the configured options, but overwrite the name\n {\n ...field,\n name: 'default',\n group: 'default',\n },\n defineField({\n name: 'active',\n type: 'boolean',\n hidden: true,\n initialValue: false,\n }),\n defineField({\n name: segmentArrayName,\n type: 'array',\n hidden: ({parent}) => {\n return !parent?.active\n },\n group: 'personalization',\n components: {\n input: (props: ArrayOfObjectsInputProps) => (\n <ArrayInput {...props} segmentName={segmentName} segmentId={segmentId} />\n ),\n },\n of: [\n defineField({\n name: segmentName,\n type: segmentName,\n }),\n ],\n }),\n ],\n preview: {\n select: {\n base: 'default',\n },\n prepare: ({base}) => {\n const title =\n typeof base === 'string'\n ? base\n : base && typeof base === 'object'\n ? base.title || base.name || ''\n : ''\n const media =\n base && typeof base === 'object' ? base.image || base.photo || base.media || '' : ''\n return {\n title,\n media,\n }\n },\n },\n })\n}\n\nconst createSegmentType = ({\n field,\n segmentNameOverride,\n segmentId,\n}: {\n field: string | FieldDefinition\n segmentNameOverride: string\n segmentId: string\n}) => {\n const typeName = typeof field === `string` ? field : field.name\n const usedName = String(typeName[0]).toUpperCase() + typeName.slice(1)\n return defineType({\n name: `${segmentNameOverride}${usedName}`,\n title: `${segmentNameOverride} array ${usedName}`,\n type: 'object',\n components: {\n preview: SegmentPreview,\n input: SegmentInput,\n },\n fields: [\n {\n type: 'string',\n name: segmentId,\n readOnly: true,\n },\n typeof field === `string`\n ? // Define a simple field if all we have is the name as a string\n defineField({\n name: 'value',\n type: field,\n })\n : // Pass in the configured options, but overwrite the name\n {\n ...field,\n name: 'value',\n },\n ],\n preview: {\n select: {\n segment: segmentId,\n value: 'value',\n },\n },\n })\n}\n\nconst fieldSchema = ({\n fields,\n personalizationNameOverride,\n segmentNameOverride,\n segmentId,\n segmentArrayName,\n}: Required<Omit<PersonalizationFieldPluginConfig, 'apiVersion' | 'segments'>>) => {\n return [\n ...fields.map((field) => createSegmentType({field, segmentNameOverride, segmentId})),\n ...fields.map((field) =>\n createPersonalizationType({\n field,\n personalizationNameOverride,\n segmentNameOverride,\n segmentId,\n segmentArrayName,\n }),\n ),\n ]\n}\n\nexport const fieldLevelPersonalization = definePlugin<PersonalizationFieldPluginConfig>(\n (config) => {\n const pluginConfig = {...CONFIG_DEFAULT, ...config}\n const {fields, personalizationNameOverride, segmentNameOverride} = pluginConfig\n\n const segmentArrayName = `${segmentNameOverride}s`\n const segmentId = `${segmentNameOverride}Id`\n\n const fieldSchemaConfig = fieldSchema({\n fields,\n personalizationNameOverride,\n segmentNameOverride,\n segmentId,\n segmentArrayName,\n })\n return {\n name: 'sanity-personalization-plugin-field-level-personalization',\n schema: {\n types: fieldSchemaConfig,\n },\n form: {\n components: {\n input: (props) => {\n const isRootInput = props.id === 'root' && isObjectInputProps(props)\n\n if (!isRootInput) {\n return props.renderDefault(props)\n }\n\n const flatFields = flattenSchemaType(props.schemaType)\n const hasPersonalization = flatFields.some(\n (field) =>\n field.type.name.startsWith(personalizationNameOverride) ||\n field.name.startsWith(personalizationNameOverride),\n )\n\n if (!hasPersonalization) {\n return props.renderDefault(props)\n }\n\n const providerProps = {\n ...props,\n personalizationFieldPluginConfig: {\n ...pluginConfig,\n segmentId,\n segmentArrayName,\n },\n }\n return <PersonalizationProvider {...providerProps} />\n },\n },\n },\n }\n },\n)\n"],"mappings":"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"}
\ No newline at end of file