@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