@strapi/content-type-builder 5.51.0 → 5.51.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/admin/components/AIChat/Chat.js +1 -1
  2. package/dist/admin/components/AIChat/Chat.js.map +1 -1
  3. package/dist/admin/components/AIChat/Chat.mjs +1 -1
  4. package/dist/admin/components/AIChat/Chat.mjs.map +1 -1
  5. package/dist/admin/components/AIChat/FeedbackModal.js +1 -1
  6. package/dist/admin/components/AIChat/FeedbackModal.js.map +1 -1
  7. package/dist/admin/components/AIChat/FeedbackModal.mjs +1 -1
  8. package/dist/admin/components/AIChat/FeedbackModal.mjs.map +1 -1
  9. package/dist/admin/components/AIChat/UploadFigmaModal.js +1 -1
  10. package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -1
  11. package/dist/admin/components/AIChat/UploadFigmaModal.mjs +1 -1
  12. package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -1
  13. package/dist/admin/components/AIChat/components/Base64Image.js +1 -1
  14. package/dist/admin/components/AIChat/components/Base64Image.js.map +1 -1
  15. package/dist/admin/components/AIChat/components/Base64Image.mjs +1 -1
  16. package/dist/admin/components/AIChat/components/Base64Image.mjs.map +1 -1
  17. package/dist/admin/components/AIChat/hooks/useAIFetch.js +1 -1
  18. package/dist/admin/components/AIChat/hooks/useAIFetch.js.map +1 -1
  19. package/dist/admin/components/AIChat/hooks/useAIFetch.mjs +1 -1
  20. package/dist/admin/components/AIChat/hooks/useAIFetch.mjs.map +1 -1
  21. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js +2 -2
  22. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -1
  23. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs +2 -2
  24. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -1
  25. package/dist/admin/components/CTBSession/useCTBTracking.js +1 -1
  26. package/dist/admin/components/CTBSession/useCTBTracking.js.map +1 -1
  27. package/dist/admin/components/CTBSession/useCTBTracking.mjs +1 -1
  28. package/dist/admin/components/CTBSession/useCTBTracking.mjs.map +1 -1
  29. package/dist/admin/components/DataManager/useServerRestartWatcher.js +1 -1
  30. package/dist/admin/components/DataManager/useServerRestartWatcher.js.map +1 -1
  31. package/dist/admin/components/DataManager/useServerRestartWatcher.mjs +1 -1
  32. package/dist/admin/components/DataManager/useServerRestartWatcher.mjs.map +1 -1
  33. package/dist/admin/components/FormModal/attributes/ConditionForm.js +1 -1
  34. package/dist/admin/components/FormModal/attributes/ConditionForm.js.map +1 -1
  35. package/dist/admin/components/FormModal/attributes/ConditionForm.mjs +1 -1
  36. package/dist/admin/components/FormModal/attributes/ConditionForm.mjs.map +1 -1
  37. package/dist/admin/components/FormModal/attributes/advancedForm.js +1 -0
  38. package/dist/admin/components/FormModal/attributes/advancedForm.js.map +1 -1
  39. package/dist/admin/components/FormModal/attributes/advancedForm.mjs +1 -0
  40. package/dist/admin/components/FormModal/attributes/advancedForm.mjs.map +1 -1
  41. package/dist/admin/components/FormModal/attributes/types.js +6 -1
  42. package/dist/admin/components/FormModal/attributes/types.js.map +1 -1
  43. package/dist/admin/components/FormModal/attributes/types.mjs +6 -1
  44. package/dist/admin/components/FormModal/attributes/types.mjs.map +1 -1
  45. package/dist/admin/components/FormModal/attributes/validation/common.js +6 -4
  46. package/dist/admin/components/FormModal/attributes/validation/common.js.map +1 -1
  47. package/dist/admin/components/FormModal/attributes/validation/common.mjs +6 -4
  48. package/dist/admin/components/FormModal/attributes/validation/common.mjs.map +1 -1
  49. package/dist/admin/components/FormModal/forms/forms.js +1 -1
  50. package/dist/admin/components/FormModal/forms/forms.js.map +1 -1
  51. package/dist/admin/components/FormModal/forms/forms.mjs +1 -1
  52. package/dist/admin/components/FormModal/forms/forms.mjs.map +1 -1
  53. package/dist/admin/components/PluralName.js +1 -1
  54. package/dist/admin/components/PluralName.js.map +1 -1
  55. package/dist/admin/components/PluralName.mjs +1 -1
  56. package/dist/admin/components/PluralName.mjs.map +1 -1
  57. package/dist/admin/src/components/CTBSession/useCTBTracking.d.ts +1 -1
  58. package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +8 -0
  59. package/dist/admin/src/components/FormModal/attributes/types.d.ts +2 -0
  60. package/dist/admin/src/types.d.ts +1 -0
  61. package/dist/admin/translations/en.json.js +1 -0
  62. package/dist/admin/translations/en.json.js.map +1 -1
  63. package/dist/admin/translations/en.json.mjs +1 -0
  64. package/dist/admin/translations/en.json.mjs.map +1 -1
  65. package/dist/server/controllers/validation/common.js +1 -1
  66. package/dist/server/controllers/validation/common.js.map +1 -1
  67. package/dist/server/controllers/validation/common.mjs +1 -1
  68. package/dist/server/controllers/validation/common.mjs.map +1 -1
  69. package/dist/server/controllers/validation/relations.js +1 -0
  70. package/dist/server/controllers/validation/relations.js.map +1 -1
  71. package/dist/server/controllers/validation/relations.mjs +1 -0
  72. package/dist/server/controllers/validation/relations.mjs.map +1 -1
  73. package/dist/server/controllers/validation/schema.js +2 -1
  74. package/dist/server/controllers/validation/schema.js.map +1 -1
  75. package/dist/server/controllers/validation/schema.mjs +2 -1
  76. package/dist/server/controllers/validation/schema.mjs.map +1 -1
  77. package/dist/server/services/content-types.js +1 -1
  78. package/dist/server/services/content-types.js.map +1 -1
  79. package/dist/server/services/content-types.mjs +1 -1
  80. package/dist/server/services/content-types.mjs.map +1 -1
  81. package/dist/server/services/schema-builder/content-type-builder.js +3 -2
  82. package/dist/server/services/schema-builder/content-type-builder.js.map +1 -1
  83. package/dist/server/services/schema-builder/content-type-builder.mjs +3 -2
  84. package/dist/server/services/schema-builder/content-type-builder.mjs.map +1 -1
  85. package/dist/server/services/schema.js +1 -5
  86. package/dist/server/services/schema.js.map +1 -1
  87. package/dist/server/services/schema.mjs +2 -2
  88. package/dist/server/services/schema.mjs.map +1 -1
  89. package/dist/server/src/controllers/validation/relations.d.ts +2 -0
  90. package/dist/server/src/controllers/validation/relations.d.ts.map +1 -1
  91. package/dist/server/src/controllers/validation/schema.d.ts +3234 -0
  92. package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
  93. package/dist/server/src/services/schema-builder/types.d.ts +1 -0
  94. package/dist/server/src/services/schema-builder/types.d.ts.map +1 -1
  95. package/dist/server/src/utils/attributes.d.ts +10 -10
  96. package/dist/server/src/utils/attributes.d.ts.map +1 -1
  97. package/dist/server/utils/attributes.js +2 -2
  98. package/dist/server/utils/attributes.js.map +1 -1
  99. package/dist/server/utils/attributes.mjs +3 -2
  100. package/dist/server/utils/attributes.mjs.map +1 -1
  101. package/package.json +7 -7
  102. package/dist/server/src/controllers/ai/auth.d.ts +0 -1
  103. package/dist/server/src/controllers/ai/auth.d.ts.map +0 -1
  104. package/dist/server/src/controllers/ai/index.d.ts +0 -1
  105. package/dist/server/src/controllers/ai/index.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"toCTB.js","sources":["../../../../../../../admin/src/components/AIChat/lib/transforms/schemas/toCTB.ts"],"sourcesContent":["import isEqual from 'lodash/isEqual';\nimport omit from 'lodash/omit';\nimport pluralize from 'pluralize';\n\nimport type { ContentType, Component, AnyAttribute } from '../../../../../types';\nimport type { Schema, SchemaAttribute } from '../../types/schema';\nimport type { Struct, UID } from '@strapi/types';\n\nconst isPluginContentTypeUid = (uid: string) => uid.startsWith('plugin::');\n\nconst isContentTypeKind = (kind: Schema['kind']): kind is Struct.ContentTypeKind => {\n return kind === 'collectionType' || kind === 'singleType';\n};\n\n/**\n * Plugin / extension content-types use server-derived identity (globalId, collectionName, …).\n * The AI chat uses a simplified shape that would otherwise overwrite those fields incorrectly.\n */\nconst isPluginContentType = (schema: Schema, oldSchema?: ContentType | Component): boolean => {\n if (schema.plugin || isPluginContentTypeUid(schema.uid)) {\n return true;\n }\n if (oldSchema && 'modelType' in oldSchema && oldSchema.modelType === 'contentType') {\n const ct = oldSchema as ContentType;\n return Boolean(ct.plugin) || isPluginContentTypeUid(String(ct.uid));\n }\n return false;\n};\n\nconst ACTION_TO_STATUS: Record<Schema['action'], ContentType['status']> = {\n create: 'NEW',\n remove: 'REMOVED',\n update: 'CHANGED',\n};\n\n/**\n * Creates a new attribute with the specified status\n */\nconst createAttributeWithStatus = (\n name: string,\n attributeData: SchemaAttribute | AnyAttribute,\n status: AnyAttribute['status']\n): AnyAttribute =>\n ({\n ...attributeData,\n name,\n status,\n }) as AnyAttribute;\n\n/**\n * Determines the status of an attribute by comparing new and old versions\n */\nconst determineAttributeStatus = (\n newAttr: Record<string, unknown>,\n oldAttr?: AnyAttribute,\n oldSchema?: ContentType | Component\n): AnyAttribute['status'] => {\n if (!oldAttr) {\n return 'NEW';\n }\n\n // If the schema was already new, don't mark attributes as changed, keep them as new.\n if (oldSchema?.status === 'NEW') {\n return 'NEW';\n }\n\n // Compare attributes without the status field to determine if they've changed\n const newAttrWithoutStatus = omit(newAttr, ['status']);\n const oldAttrWithoutStatus = omit(oldAttr, ['status']);\n\n if (!isEqual(newAttrWithoutStatus, oldAttrWithoutStatus)) {\n return 'CHANGED';\n }\n\n // If unchanged, keep the previous status\n return oldAttr.status;\n};\n\n/**\n * Determines the status of a schema by comparing action and checking if oldSchema exists\n */\nconst transformStatusFromChatToCTB = (\n schema: Schema,\n oldSchema?: ContentType | Component\n): ContentType['status'] => {\n // If schema has an action, use the mapped status\n if (schema.action) {\n return ACTION_TO_STATUS[schema.action];\n }\n\n // If oldSchema doesn't exist, it's a new schema\n if (!oldSchema) {\n return 'NEW';\n }\n\n // If no action is specified and oldSchema exists, keep the existing status\n return oldSchema.status;\n};\n\n/**\n * Transform attributes from Chat format to CTB format\n * Also performs a diff to determine the status of each attribute\n */\nexport const transformAttributesFromChatToCTB = (\n { action, attributes }: Schema,\n oldSchema?: ContentType | Component\n): AnyAttribute[] => {\n // If it's a new schema or no oldAttributes provided, all attributes are NEW\n if (action === 'create' || !oldSchema) {\n return Object.entries(attributes).map(([name, attribute]) =>\n createAttributeWithStatus(name, attribute, 'NEW')\n );\n }\n\n // Convert old attributes array to a lookup map for faster access\n const oldAttributesMap = oldSchema.attributes.reduce(\n (acc, attr) => ({ ...acc, [attr.name]: attr }),\n {} as Record<string, AnyAttribute>\n );\n\n // Process current attributes (new and changed)\n const processedAttributes = Object.entries(attributes).map(([name, attr]) => {\n const oldAttr = oldAttributesMap[name];\n const status = determineAttributeStatus({ ...attr, name }, oldAttr, oldSchema);\n\n return createAttributeWithStatus(name, attr, status);\n });\n\n // No need to mark removed attributes if the old schema is new, just remove it from the list\n // TODO: Else a validation error occurs on the backend side.\n if (oldSchema?.status === 'NEW') {\n return processedAttributes;\n }\n\n // Find removed attributes (exist in old but not in new)\n const removedAttributes = Object.entries(oldAttributesMap)\n .filter(([name]) => !attributes[name])\n .map(([name, oldAttr]) => createAttributeWithStatus(name, oldAttr, 'REMOVED'));\n\n // Combine both sets of attributes\n return [...processedAttributes, ...removedAttributes];\n};\n\n/**\n * Transform schema format\n * AI chat -> CTB\n *\n * The AI chat returns a simplified format, and this layer transforms it to be compatible with the CTB reducer.\n *\n * We need to keep track of which changes have been made\n */\nexport const transformChatToCTB = (\n schema: Schema,\n oldSchema?: ContentType | Component\n): ContentType | Component => {\n const singularName = pluralize.singular(schema.name).toLowerCase().replace(/ /g, '-');\n const pluralName = pluralize.plural(schema.name).toLowerCase().replace(/ /g, '-');\n\n if (schema.modelType === 'component') {\n return {\n category: schema.category || 'default',\n modelName: singularName,\n attributes: transformAttributesFromChatToCTB(schema, oldSchema),\n info: {\n displayName: schema.name,\n description: schema.description,\n // TODO\n // icon: schema.icon,\n },\n modelType: schema.modelType,\n uid: schema.uid as UID.Component,\n collectionName: pluralName,\n status: transformStatusFromChatToCTB(schema, oldSchema),\n globalId: singularName,\n } satisfies Component;\n }\n\n const previousContentType = oldSchema?.modelType === 'contentType' ? oldSchema : undefined;\n const kind = isContentTypeKind(schema.kind) ? schema.kind : 'collectionType';\n\n const contentTypeBase = {\n uid: schema.uid as UID.ContentType,\n modelType: 'contentType',\n modelName: singularName,\n kind,\n info: {\n displayName: schema.name.charAt(0).toUpperCase() + schema.name.slice(1),\n // Always keep the old by default\n singularName: previousContentType?.info.singularName ?? singularName,\n // Always keep the old by default\n pluralName: previousContentType?.info.pluralName ?? pluralName,\n },\n collectionName: pluralName,\n attributes: transformAttributesFromChatToCTB(schema, oldSchema),\n options: {\n draftAndPublish: schema.options?.draftAndPublish ?? true,\n },\n pluginOptions: {\n i18n: {\n localized: schema.options?.localized ?? false,\n },\n },\n visible: true,\n status: transformStatusFromChatToCTB(schema, oldSchema),\n globalId: singularName,\n restrictRelationsTo: null, // TODO: not sure what this is about\n } satisfies ContentType;\n\n if (\n isPluginContentType(schema, oldSchema) &&\n oldSchema &&\n oldSchema.modelType === 'contentType'\n ) {\n const prev = oldSchema as ContentType;\n return {\n ...contentTypeBase,\n plugin: prev.plugin ?? schema.plugin,\n globalId: prev.globalId,\n modelName: prev.modelName,\n collectionName: prev.collectionName,\n info: {\n ...contentTypeBase.info,\n singularName: prev.info.singularName,\n pluralName: prev.info.pluralName,\n },\n options: {\n ...prev.options,\n ...contentTypeBase.options,\n draftAndPublish: schema.options?.draftAndPublish ?? prev.options?.draftAndPublish ?? true,\n },\n pluginOptions: {\n ...prev.pluginOptions,\n ...contentTypeBase.pluginOptions,\n i18n: {\n ...((prev.pluginOptions?.i18n as Record<string, unknown> | undefined) ?? {}),\n ...((contentTypeBase.pluginOptions?.i18n as Record<string, unknown> | undefined) ?? {}),\n localized:\n schema.options?.localized ??\n (prev.pluginOptions?.i18n as { localized?: boolean } | undefined)?.localized ??\n false,\n },\n },\n visible: prev.visible,\n restrictRelationsTo: prev.restrictRelationsTo,\n } satisfies ContentType;\n }\n\n if (isPluginContentType(schema, oldSchema) && schema.plugin) {\n return {\n ...contentTypeBase,\n plugin: schema.plugin,\n } satisfies ContentType;\n }\n\n return contentTypeBase;\n};\n"],"names":["isPluginContentTypeUid","uid","startsWith","isContentTypeKind","kind","isPluginContentType","schema","oldSchema","plugin","modelType","ct","Boolean","String","ACTION_TO_STATUS","create","remove","update","createAttributeWithStatus","name","attributeData","status","determineAttributeStatus","newAttr","oldAttr","newAttrWithoutStatus","omit","oldAttrWithoutStatus","isEqual","transformStatusFromChatToCTB","action","transformAttributesFromChatToCTB","attributes","Object","entries","map","attribute","oldAttributesMap","reduce","acc","attr","processedAttributes","removedAttributes","filter","transformChatToCTB","singularName","pluralize","singular","toLowerCase","replace","pluralName","plural","category","modelName","info","displayName","description","collectionName","globalId","previousContentType","undefined","contentTypeBase","charAt","toUpperCase","slice","options","draftAndPublish","pluginOptions","i18n","localized","visible","restrictRelationsTo","prev"],"mappings":"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"}
1
+ {"version":3,"file":"toCTB.js","sources":["../../../../../../../admin/src/components/AIChat/lib/transforms/schemas/toCTB.ts"],"sourcesContent":["import isEqual from 'lodash/isEqual';\nimport omit from 'lodash/omit';\nimport pluralize from 'pluralize';\n\nimport type { ContentType, Component, AnyAttribute } from '../../../../../types';\nimport type { Schema, SchemaAttribute } from '../../types/schema';\nimport type { Struct, UID } from '@strapi/types';\n\nconst isPluginContentTypeUid = (uid: string) => uid.startsWith('plugin::');\n\nconst isContentTypeKind = (kind: Schema['kind']): kind is Struct.ContentTypeKind => {\n return kind === 'collectionType' || kind === 'singleType';\n};\n\n/**\n * Plugin / extension content-types use server-derived identity (globalId, collectionName, …).\n * The AI chat uses a simplified shape that would otherwise overwrite those fields incorrectly.\n */\nconst isPluginContentType = (schema: Schema, oldSchema?: ContentType | Component): boolean => {\n if (schema.plugin || isPluginContentTypeUid(schema.uid)) {\n return true;\n }\n if (oldSchema && 'modelType' in oldSchema && oldSchema.modelType === 'contentType') {\n const ct = oldSchema as ContentType;\n return Boolean(ct.plugin) || isPluginContentTypeUid(String(ct.uid));\n }\n return false;\n};\n\nconst ACTION_TO_STATUS: Record<Schema['action'], ContentType['status']> = {\n create: 'NEW',\n remove: 'REMOVED',\n update: 'CHANGED',\n};\n\n/**\n * Creates a new attribute with the specified status\n */\nconst createAttributeWithStatus = (\n name: string,\n attributeData: SchemaAttribute | AnyAttribute,\n status: AnyAttribute['status']\n): AnyAttribute =>\n ({\n ...attributeData,\n name,\n status,\n }) as AnyAttribute;\n\n/**\n * Determines the status of an attribute by comparing new and old versions\n */\nconst determineAttributeStatus = (\n newAttr: Record<string, unknown>,\n oldAttr?: AnyAttribute,\n oldSchema?: ContentType | Component\n): AnyAttribute['status'] => {\n if (!oldAttr) {\n return 'NEW';\n }\n\n // If the schema was already new, don't mark attributes as changed, keep them as new.\n if (oldSchema?.status === 'NEW') {\n return 'NEW';\n }\n\n // Compare attributes without the status field to determine if they've changed\n const newAttrWithoutStatus = omit(newAttr, ['status']);\n const oldAttrWithoutStatus = omit(oldAttr, ['status']);\n\n if (!isEqual(newAttrWithoutStatus, oldAttrWithoutStatus)) {\n return 'CHANGED';\n }\n\n // If unchanged, keep the previous status\n return oldAttr.status;\n};\n\n/**\n * Determines the status of a schema by comparing action and checking if oldSchema exists\n */\nconst transformStatusFromChatToCTB = (\n schema: Schema,\n oldSchema?: ContentType | Component\n): ContentType['status'] => {\n // If schema has an action, use the mapped status\n if (schema.action) {\n return ACTION_TO_STATUS[schema.action];\n }\n\n // If oldSchema doesn't exist, it's a new schema\n if (!oldSchema) {\n return 'NEW';\n }\n\n // If no action is specified and oldSchema exists, keep the existing status\n return oldSchema.status;\n};\n\n/**\n * Transform attributes from Chat format to CTB format\n * Also performs a diff to determine the status of each attribute\n */\nexport const transformAttributesFromChatToCTB = (\n { action, attributes }: Schema,\n oldSchema?: ContentType | Component\n): AnyAttribute[] => {\n // If it's a new schema or no oldAttributes provided, all attributes are NEW\n if (action === 'create' || !oldSchema) {\n return Object.entries(attributes).map(([name, attribute]) =>\n createAttributeWithStatus(name, attribute, 'NEW')\n );\n }\n\n // Convert old attributes array to a lookup map for faster access\n const oldAttributesMap = oldSchema.attributes.reduce(\n (acc, attr) => ({ ...acc, [attr.name]: attr }),\n {} as Record<string, AnyAttribute>\n );\n\n // Process current attributes (new and changed)\n const processedAttributes = Object.entries(attributes).map(([name, attr]) => {\n const oldAttr = oldAttributesMap[name];\n const status = determineAttributeStatus({ ...attr, name }, oldAttr, oldSchema);\n\n return createAttributeWithStatus(name, attr, status);\n });\n\n // No need to mark removed attributes if the old schema is new, just remove it from the list\n // TODO: Else a validation error occurs on the backend side.\n if (oldSchema?.status === 'NEW') {\n return processedAttributes;\n }\n\n // Find removed attributes (exist in old but not in new)\n const removedAttributes = Object.entries(oldAttributesMap)\n .filter(([name]) => !attributes[name])\n .map(([name, oldAttr]) => createAttributeWithStatus(name, oldAttr, 'REMOVED'));\n\n // Combine both sets of attributes\n return [...processedAttributes, ...removedAttributes];\n};\n\n/**\n * Transform schema format\n * AI chat -> CTB\n *\n * The AI chat returns a simplified format, and this layer transforms it to be compatible with the CTB reducer.\n *\n * We need to keep track of which changes have been made\n */\nexport const transformChatToCTB = (\n schema: Schema,\n oldSchema?: ContentType | Component\n): ContentType | Component => {\n const singularName = pluralize.singular(schema.name).toLowerCase().replace(/ /g, '-');\n const pluralName = pluralize.plural(schema.name).toLowerCase().replace(/ /g, '-');\n\n if (schema.modelType === 'component') {\n return {\n category: schema.category || 'default',\n modelName: singularName,\n attributes: transformAttributesFromChatToCTB(schema, oldSchema),\n info: {\n displayName: schema.name,\n description: schema.description,\n // TODO\n // icon: schema.icon,\n },\n modelType: schema.modelType,\n uid: schema.uid as UID.Component,\n collectionName: pluralName,\n status: transformStatusFromChatToCTB(schema, oldSchema),\n globalId: singularName,\n } satisfies Component;\n }\n\n const previousContentType = oldSchema?.modelType === 'contentType' ? oldSchema : undefined;\n const kind = isContentTypeKind(schema.kind) ? schema.kind : 'collectionType';\n\n const contentTypeBase = {\n uid: schema.uid as UID.ContentType,\n modelType: 'contentType',\n modelName: singularName,\n kind,\n info: {\n displayName: schema.name.charAt(0).toUpperCase() + schema.name.slice(1),\n // Always keep the old by default\n singularName: previousContentType?.info.singularName ?? singularName,\n // Always keep the old by default\n pluralName: previousContentType?.info.pluralName ?? pluralName,\n },\n collectionName: pluralName,\n attributes: transformAttributesFromChatToCTB(schema, oldSchema),\n options: {\n draftAndPublish: schema.options?.draftAndPublish ?? true,\n },\n pluginOptions: {\n i18n: {\n localized: schema.options?.localized ?? false,\n },\n },\n visible: true,\n status: transformStatusFromChatToCTB(schema, oldSchema),\n globalId: singularName,\n restrictRelationsTo: null, // TODO: not sure what this is about\n } satisfies ContentType;\n\n if (\n isPluginContentType(schema, oldSchema) &&\n oldSchema &&\n oldSchema.modelType === 'contentType'\n ) {\n const prev = oldSchema as ContentType;\n return {\n ...contentTypeBase,\n plugin: prev.plugin ?? schema.plugin,\n globalId: prev.globalId,\n modelName: prev.modelName,\n collectionName: prev.collectionName,\n info: {\n ...contentTypeBase.info,\n singularName: prev.info.singularName,\n pluralName: prev.info.pluralName,\n },\n options: {\n ...prev.options,\n ...contentTypeBase.options,\n draftAndPublish: schema.options?.draftAndPublish ?? prev.options?.draftAndPublish ?? true,\n },\n pluginOptions: {\n ...prev.pluginOptions,\n ...contentTypeBase.pluginOptions,\n i18n: {\n ...(prev.pluginOptions?.i18n as Record<string, unknown> | undefined),\n ...(contentTypeBase.pluginOptions?.i18n as Record<string, unknown> | undefined),\n localized:\n schema.options?.localized ??\n (prev.pluginOptions?.i18n as { localized?: boolean } | undefined)?.localized ??\n false,\n },\n },\n visible: prev.visible,\n restrictRelationsTo: prev.restrictRelationsTo,\n } satisfies ContentType;\n }\n\n if (isPluginContentType(schema, oldSchema) && schema.plugin) {\n return {\n ...contentTypeBase,\n plugin: schema.plugin,\n } satisfies ContentType;\n }\n\n return contentTypeBase;\n};\n"],"names":["isPluginContentTypeUid","uid","startsWith","isContentTypeKind","kind","isPluginContentType","schema","oldSchema","plugin","modelType","ct","Boolean","String","ACTION_TO_STATUS","create","remove","update","createAttributeWithStatus","name","attributeData","status","determineAttributeStatus","newAttr","oldAttr","newAttrWithoutStatus","omit","oldAttrWithoutStatus","isEqual","transformStatusFromChatToCTB","action","transformAttributesFromChatToCTB","attributes","Object","entries","map","attribute","oldAttributesMap","reduce","acc","attr","processedAttributes","removedAttributes","filter","transformChatToCTB","singularName","pluralize","singular","toLowerCase","replace","pluralName","plural","category","modelName","info","displayName","description","collectionName","globalId","previousContentType","undefined","contentTypeBase","charAt","toUpperCase","slice","options","draftAndPublish","pluginOptions","i18n","localized","visible","restrictRelationsTo","prev"],"mappings":"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"}
@@ -180,8 +180,8 @@ const ACTION_TO_STATUS = {
180
180
  ...prev.pluginOptions,
181
181
  ...contentTypeBase.pluginOptions,
182
182
  i18n: {
183
- ...prev.pluginOptions?.i18n ?? {},
184
- ...contentTypeBase.pluginOptions?.i18n ?? {},
183
+ ...prev.pluginOptions?.i18n,
184
+ ...contentTypeBase.pluginOptions?.i18n,
185
185
  localized: schema.options?.localized ?? prev.pluginOptions?.i18n?.localized ?? false
186
186
  }
187
187
  },
@@ -1 +1 @@
1
- {"version":3,"file":"toCTB.mjs","sources":["../../../../../../../admin/src/components/AIChat/lib/transforms/schemas/toCTB.ts"],"sourcesContent":["import isEqual from 'lodash/isEqual';\nimport omit from 'lodash/omit';\nimport pluralize from 'pluralize';\n\nimport type { ContentType, Component, AnyAttribute } from '../../../../../types';\nimport type { Schema, SchemaAttribute } from '../../types/schema';\nimport type { Struct, UID } from '@strapi/types';\n\nconst isPluginContentTypeUid = (uid: string) => uid.startsWith('plugin::');\n\nconst isContentTypeKind = (kind: Schema['kind']): kind is Struct.ContentTypeKind => {\n return kind === 'collectionType' || kind === 'singleType';\n};\n\n/**\n * Plugin / extension content-types use server-derived identity (globalId, collectionName, …).\n * The AI chat uses a simplified shape that would otherwise overwrite those fields incorrectly.\n */\nconst isPluginContentType = (schema: Schema, oldSchema?: ContentType | Component): boolean => {\n if (schema.plugin || isPluginContentTypeUid(schema.uid)) {\n return true;\n }\n if (oldSchema && 'modelType' in oldSchema && oldSchema.modelType === 'contentType') {\n const ct = oldSchema as ContentType;\n return Boolean(ct.plugin) || isPluginContentTypeUid(String(ct.uid));\n }\n return false;\n};\n\nconst ACTION_TO_STATUS: Record<Schema['action'], ContentType['status']> = {\n create: 'NEW',\n remove: 'REMOVED',\n update: 'CHANGED',\n};\n\n/**\n * Creates a new attribute with the specified status\n */\nconst createAttributeWithStatus = (\n name: string,\n attributeData: SchemaAttribute | AnyAttribute,\n status: AnyAttribute['status']\n): AnyAttribute =>\n ({\n ...attributeData,\n name,\n status,\n }) as AnyAttribute;\n\n/**\n * Determines the status of an attribute by comparing new and old versions\n */\nconst determineAttributeStatus = (\n newAttr: Record<string, unknown>,\n oldAttr?: AnyAttribute,\n oldSchema?: ContentType | Component\n): AnyAttribute['status'] => {\n if (!oldAttr) {\n return 'NEW';\n }\n\n // If the schema was already new, don't mark attributes as changed, keep them as new.\n if (oldSchema?.status === 'NEW') {\n return 'NEW';\n }\n\n // Compare attributes without the status field to determine if they've changed\n const newAttrWithoutStatus = omit(newAttr, ['status']);\n const oldAttrWithoutStatus = omit(oldAttr, ['status']);\n\n if (!isEqual(newAttrWithoutStatus, oldAttrWithoutStatus)) {\n return 'CHANGED';\n }\n\n // If unchanged, keep the previous status\n return oldAttr.status;\n};\n\n/**\n * Determines the status of a schema by comparing action and checking if oldSchema exists\n */\nconst transformStatusFromChatToCTB = (\n schema: Schema,\n oldSchema?: ContentType | Component\n): ContentType['status'] => {\n // If schema has an action, use the mapped status\n if (schema.action) {\n return ACTION_TO_STATUS[schema.action];\n }\n\n // If oldSchema doesn't exist, it's a new schema\n if (!oldSchema) {\n return 'NEW';\n }\n\n // If no action is specified and oldSchema exists, keep the existing status\n return oldSchema.status;\n};\n\n/**\n * Transform attributes from Chat format to CTB format\n * Also performs a diff to determine the status of each attribute\n */\nexport const transformAttributesFromChatToCTB = (\n { action, attributes }: Schema,\n oldSchema?: ContentType | Component\n): AnyAttribute[] => {\n // If it's a new schema or no oldAttributes provided, all attributes are NEW\n if (action === 'create' || !oldSchema) {\n return Object.entries(attributes).map(([name, attribute]) =>\n createAttributeWithStatus(name, attribute, 'NEW')\n );\n }\n\n // Convert old attributes array to a lookup map for faster access\n const oldAttributesMap = oldSchema.attributes.reduce(\n (acc, attr) => ({ ...acc, [attr.name]: attr }),\n {} as Record<string, AnyAttribute>\n );\n\n // Process current attributes (new and changed)\n const processedAttributes = Object.entries(attributes).map(([name, attr]) => {\n const oldAttr = oldAttributesMap[name];\n const status = determineAttributeStatus({ ...attr, name }, oldAttr, oldSchema);\n\n return createAttributeWithStatus(name, attr, status);\n });\n\n // No need to mark removed attributes if the old schema is new, just remove it from the list\n // TODO: Else a validation error occurs on the backend side.\n if (oldSchema?.status === 'NEW') {\n return processedAttributes;\n }\n\n // Find removed attributes (exist in old but not in new)\n const removedAttributes = Object.entries(oldAttributesMap)\n .filter(([name]) => !attributes[name])\n .map(([name, oldAttr]) => createAttributeWithStatus(name, oldAttr, 'REMOVED'));\n\n // Combine both sets of attributes\n return [...processedAttributes, ...removedAttributes];\n};\n\n/**\n * Transform schema format\n * AI chat -> CTB\n *\n * The AI chat returns a simplified format, and this layer transforms it to be compatible with the CTB reducer.\n *\n * We need to keep track of which changes have been made\n */\nexport const transformChatToCTB = (\n schema: Schema,\n oldSchema?: ContentType | Component\n): ContentType | Component => {\n const singularName = pluralize.singular(schema.name).toLowerCase().replace(/ /g, '-');\n const pluralName = pluralize.plural(schema.name).toLowerCase().replace(/ /g, '-');\n\n if (schema.modelType === 'component') {\n return {\n category: schema.category || 'default',\n modelName: singularName,\n attributes: transformAttributesFromChatToCTB(schema, oldSchema),\n info: {\n displayName: schema.name,\n description: schema.description,\n // TODO\n // icon: schema.icon,\n },\n modelType: schema.modelType,\n uid: schema.uid as UID.Component,\n collectionName: pluralName,\n status: transformStatusFromChatToCTB(schema, oldSchema),\n globalId: singularName,\n } satisfies Component;\n }\n\n const previousContentType = oldSchema?.modelType === 'contentType' ? oldSchema : undefined;\n const kind = isContentTypeKind(schema.kind) ? schema.kind : 'collectionType';\n\n const contentTypeBase = {\n uid: schema.uid as UID.ContentType,\n modelType: 'contentType',\n modelName: singularName,\n kind,\n info: {\n displayName: schema.name.charAt(0).toUpperCase() + schema.name.slice(1),\n // Always keep the old by default\n singularName: previousContentType?.info.singularName ?? singularName,\n // Always keep the old by default\n pluralName: previousContentType?.info.pluralName ?? pluralName,\n },\n collectionName: pluralName,\n attributes: transformAttributesFromChatToCTB(schema, oldSchema),\n options: {\n draftAndPublish: schema.options?.draftAndPublish ?? true,\n },\n pluginOptions: {\n i18n: {\n localized: schema.options?.localized ?? false,\n },\n },\n visible: true,\n status: transformStatusFromChatToCTB(schema, oldSchema),\n globalId: singularName,\n restrictRelationsTo: null, // TODO: not sure what this is about\n } satisfies ContentType;\n\n if (\n isPluginContentType(schema, oldSchema) &&\n oldSchema &&\n oldSchema.modelType === 'contentType'\n ) {\n const prev = oldSchema as ContentType;\n return {\n ...contentTypeBase,\n plugin: prev.plugin ?? schema.plugin,\n globalId: prev.globalId,\n modelName: prev.modelName,\n collectionName: prev.collectionName,\n info: {\n ...contentTypeBase.info,\n singularName: prev.info.singularName,\n pluralName: prev.info.pluralName,\n },\n options: {\n ...prev.options,\n ...contentTypeBase.options,\n draftAndPublish: schema.options?.draftAndPublish ?? prev.options?.draftAndPublish ?? true,\n },\n pluginOptions: {\n ...prev.pluginOptions,\n ...contentTypeBase.pluginOptions,\n i18n: {\n ...((prev.pluginOptions?.i18n as Record<string, unknown> | undefined) ?? {}),\n ...((contentTypeBase.pluginOptions?.i18n as Record<string, unknown> | undefined) ?? {}),\n localized:\n schema.options?.localized ??\n (prev.pluginOptions?.i18n as { localized?: boolean } | undefined)?.localized ??\n false,\n },\n },\n visible: prev.visible,\n restrictRelationsTo: prev.restrictRelationsTo,\n } satisfies ContentType;\n }\n\n if (isPluginContentType(schema, oldSchema) && schema.plugin) {\n return {\n ...contentTypeBase,\n plugin: schema.plugin,\n } satisfies ContentType;\n }\n\n return contentTypeBase;\n};\n"],"names":["isPluginContentTypeUid","uid","startsWith","isContentTypeKind","kind","isPluginContentType","schema","oldSchema","plugin","modelType","ct","Boolean","String","ACTION_TO_STATUS","create","remove","update","createAttributeWithStatus","name","attributeData","status","determineAttributeStatus","newAttr","oldAttr","newAttrWithoutStatus","omit","oldAttrWithoutStatus","isEqual","transformStatusFromChatToCTB","action","transformAttributesFromChatToCTB","attributes","Object","entries","map","attribute","oldAttributesMap","reduce","acc","attr","processedAttributes","removedAttributes","filter","transformChatToCTB","singularName","pluralize","singular","toLowerCase","replace","pluralName","plural","category","modelName","info","displayName","description","collectionName","globalId","previousContentType","undefined","contentTypeBase","charAt","toUpperCase","slice","options","draftAndPublish","pluginOptions","i18n","localized","visible","restrictRelationsTo","prev"],"mappings":"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"}
1
+ {"version":3,"file":"toCTB.mjs","sources":["../../../../../../../admin/src/components/AIChat/lib/transforms/schemas/toCTB.ts"],"sourcesContent":["import isEqual from 'lodash/isEqual';\nimport omit from 'lodash/omit';\nimport pluralize from 'pluralize';\n\nimport type { ContentType, Component, AnyAttribute } from '../../../../../types';\nimport type { Schema, SchemaAttribute } from '../../types/schema';\nimport type { Struct, UID } from '@strapi/types';\n\nconst isPluginContentTypeUid = (uid: string) => uid.startsWith('plugin::');\n\nconst isContentTypeKind = (kind: Schema['kind']): kind is Struct.ContentTypeKind => {\n return kind === 'collectionType' || kind === 'singleType';\n};\n\n/**\n * Plugin / extension content-types use server-derived identity (globalId, collectionName, …).\n * The AI chat uses a simplified shape that would otherwise overwrite those fields incorrectly.\n */\nconst isPluginContentType = (schema: Schema, oldSchema?: ContentType | Component): boolean => {\n if (schema.plugin || isPluginContentTypeUid(schema.uid)) {\n return true;\n }\n if (oldSchema && 'modelType' in oldSchema && oldSchema.modelType === 'contentType') {\n const ct = oldSchema as ContentType;\n return Boolean(ct.plugin) || isPluginContentTypeUid(String(ct.uid));\n }\n return false;\n};\n\nconst ACTION_TO_STATUS: Record<Schema['action'], ContentType['status']> = {\n create: 'NEW',\n remove: 'REMOVED',\n update: 'CHANGED',\n};\n\n/**\n * Creates a new attribute with the specified status\n */\nconst createAttributeWithStatus = (\n name: string,\n attributeData: SchemaAttribute | AnyAttribute,\n status: AnyAttribute['status']\n): AnyAttribute =>\n ({\n ...attributeData,\n name,\n status,\n }) as AnyAttribute;\n\n/**\n * Determines the status of an attribute by comparing new and old versions\n */\nconst determineAttributeStatus = (\n newAttr: Record<string, unknown>,\n oldAttr?: AnyAttribute,\n oldSchema?: ContentType | Component\n): AnyAttribute['status'] => {\n if (!oldAttr) {\n return 'NEW';\n }\n\n // If the schema was already new, don't mark attributes as changed, keep them as new.\n if (oldSchema?.status === 'NEW') {\n return 'NEW';\n }\n\n // Compare attributes without the status field to determine if they've changed\n const newAttrWithoutStatus = omit(newAttr, ['status']);\n const oldAttrWithoutStatus = omit(oldAttr, ['status']);\n\n if (!isEqual(newAttrWithoutStatus, oldAttrWithoutStatus)) {\n return 'CHANGED';\n }\n\n // If unchanged, keep the previous status\n return oldAttr.status;\n};\n\n/**\n * Determines the status of a schema by comparing action and checking if oldSchema exists\n */\nconst transformStatusFromChatToCTB = (\n schema: Schema,\n oldSchema?: ContentType | Component\n): ContentType['status'] => {\n // If schema has an action, use the mapped status\n if (schema.action) {\n return ACTION_TO_STATUS[schema.action];\n }\n\n // If oldSchema doesn't exist, it's a new schema\n if (!oldSchema) {\n return 'NEW';\n }\n\n // If no action is specified and oldSchema exists, keep the existing status\n return oldSchema.status;\n};\n\n/**\n * Transform attributes from Chat format to CTB format\n * Also performs a diff to determine the status of each attribute\n */\nexport const transformAttributesFromChatToCTB = (\n { action, attributes }: Schema,\n oldSchema?: ContentType | Component\n): AnyAttribute[] => {\n // If it's a new schema or no oldAttributes provided, all attributes are NEW\n if (action === 'create' || !oldSchema) {\n return Object.entries(attributes).map(([name, attribute]) =>\n createAttributeWithStatus(name, attribute, 'NEW')\n );\n }\n\n // Convert old attributes array to a lookup map for faster access\n const oldAttributesMap = oldSchema.attributes.reduce(\n (acc, attr) => ({ ...acc, [attr.name]: attr }),\n {} as Record<string, AnyAttribute>\n );\n\n // Process current attributes (new and changed)\n const processedAttributes = Object.entries(attributes).map(([name, attr]) => {\n const oldAttr = oldAttributesMap[name];\n const status = determineAttributeStatus({ ...attr, name }, oldAttr, oldSchema);\n\n return createAttributeWithStatus(name, attr, status);\n });\n\n // No need to mark removed attributes if the old schema is new, just remove it from the list\n // TODO: Else a validation error occurs on the backend side.\n if (oldSchema?.status === 'NEW') {\n return processedAttributes;\n }\n\n // Find removed attributes (exist in old but not in new)\n const removedAttributes = Object.entries(oldAttributesMap)\n .filter(([name]) => !attributes[name])\n .map(([name, oldAttr]) => createAttributeWithStatus(name, oldAttr, 'REMOVED'));\n\n // Combine both sets of attributes\n return [...processedAttributes, ...removedAttributes];\n};\n\n/**\n * Transform schema format\n * AI chat -> CTB\n *\n * The AI chat returns a simplified format, and this layer transforms it to be compatible with the CTB reducer.\n *\n * We need to keep track of which changes have been made\n */\nexport const transformChatToCTB = (\n schema: Schema,\n oldSchema?: ContentType | Component\n): ContentType | Component => {\n const singularName = pluralize.singular(schema.name).toLowerCase().replace(/ /g, '-');\n const pluralName = pluralize.plural(schema.name).toLowerCase().replace(/ /g, '-');\n\n if (schema.modelType === 'component') {\n return {\n category: schema.category || 'default',\n modelName: singularName,\n attributes: transformAttributesFromChatToCTB(schema, oldSchema),\n info: {\n displayName: schema.name,\n description: schema.description,\n // TODO\n // icon: schema.icon,\n },\n modelType: schema.modelType,\n uid: schema.uid as UID.Component,\n collectionName: pluralName,\n status: transformStatusFromChatToCTB(schema, oldSchema),\n globalId: singularName,\n } satisfies Component;\n }\n\n const previousContentType = oldSchema?.modelType === 'contentType' ? oldSchema : undefined;\n const kind = isContentTypeKind(schema.kind) ? schema.kind : 'collectionType';\n\n const contentTypeBase = {\n uid: schema.uid as UID.ContentType,\n modelType: 'contentType',\n modelName: singularName,\n kind,\n info: {\n displayName: schema.name.charAt(0).toUpperCase() + schema.name.slice(1),\n // Always keep the old by default\n singularName: previousContentType?.info.singularName ?? singularName,\n // Always keep the old by default\n pluralName: previousContentType?.info.pluralName ?? pluralName,\n },\n collectionName: pluralName,\n attributes: transformAttributesFromChatToCTB(schema, oldSchema),\n options: {\n draftAndPublish: schema.options?.draftAndPublish ?? true,\n },\n pluginOptions: {\n i18n: {\n localized: schema.options?.localized ?? false,\n },\n },\n visible: true,\n status: transformStatusFromChatToCTB(schema, oldSchema),\n globalId: singularName,\n restrictRelationsTo: null, // TODO: not sure what this is about\n } satisfies ContentType;\n\n if (\n isPluginContentType(schema, oldSchema) &&\n oldSchema &&\n oldSchema.modelType === 'contentType'\n ) {\n const prev = oldSchema as ContentType;\n return {\n ...contentTypeBase,\n plugin: prev.plugin ?? schema.plugin,\n globalId: prev.globalId,\n modelName: prev.modelName,\n collectionName: prev.collectionName,\n info: {\n ...contentTypeBase.info,\n singularName: prev.info.singularName,\n pluralName: prev.info.pluralName,\n },\n options: {\n ...prev.options,\n ...contentTypeBase.options,\n draftAndPublish: schema.options?.draftAndPublish ?? prev.options?.draftAndPublish ?? true,\n },\n pluginOptions: {\n ...prev.pluginOptions,\n ...contentTypeBase.pluginOptions,\n i18n: {\n ...(prev.pluginOptions?.i18n as Record<string, unknown> | undefined),\n ...(contentTypeBase.pluginOptions?.i18n as Record<string, unknown> | undefined),\n localized:\n schema.options?.localized ??\n (prev.pluginOptions?.i18n as { localized?: boolean } | undefined)?.localized ??\n false,\n },\n },\n visible: prev.visible,\n restrictRelationsTo: prev.restrictRelationsTo,\n } satisfies ContentType;\n }\n\n if (isPluginContentType(schema, oldSchema) && schema.plugin) {\n return {\n ...contentTypeBase,\n plugin: schema.plugin,\n } satisfies ContentType;\n }\n\n return contentTypeBase;\n};\n"],"names":["isPluginContentTypeUid","uid","startsWith","isContentTypeKind","kind","isPluginContentType","schema","oldSchema","plugin","modelType","ct","Boolean","String","ACTION_TO_STATUS","create","remove","update","createAttributeWithStatus","name","attributeData","status","determineAttributeStatus","newAttr","oldAttr","newAttrWithoutStatus","omit","oldAttrWithoutStatus","isEqual","transformStatusFromChatToCTB","action","transformAttributesFromChatToCTB","attributes","Object","entries","map","attribute","oldAttributesMap","reduce","acc","attr","processedAttributes","removedAttributes","filter","transformChatToCTB","singularName","pluralize","singular","toLowerCase","replace","pluralName","plural","category","modelName","info","displayName","description","collectionName","globalId","previousContentType","undefined","contentTypeBase","charAt","toUpperCase","slice","options","draftAndPublish","pluginOptions","i18n","localized","visible","restrictRelationsTo","prev"],"mappings":";;;;AAQA,MAAMA,sBAAAA,GAAyB,CAACC,GAAAA,GAAgBA,GAAAA,CAAIC,UAAU,CAAC,UAAA,CAAA;AAE/D,MAAMC,oBAAoB,CAACC,IAAAA,GAAAA;IACzB,OAAOA,IAAAA,KAAS,oBAAoBA,IAAAA,KAAS,YAAA;AAC/C,CAAA;AAEA;;;IAIA,MAAMC,mBAAAA,GAAsB,CAACC,MAAAA,EAAgBC,SAAAA,GAAAA;AAC3C,IAAA,IAAID,OAAOE,MAAM,IAAIR,sBAAAA,CAAuBM,MAAAA,CAAOL,GAAG,CAAA,EAAG;QACvD,OAAO,IAAA;AACT,IAAA;AACA,IAAA,IAAIM,aAAa,WAAA,IAAeA,SAAAA,IAAaA,SAAAA,CAAUE,SAAS,KAAK,aAAA,EAAe;AAClF,QAAA,MAAMC,EAAAA,GAAKH,SAAAA;AACX,QAAA,OAAOI,QAAQD,EAAAA,CAAGF,MAAM,KAAKR,sBAAAA,CAAuBY,MAAAA,CAAOF,GAAGT,GAAG,CAAA,CAAA;AACnE,IAAA;IACA,OAAO,KAAA;AACT,CAAA;AAEA,MAAMY,gBAAAA,GAAoE;IACxEC,MAAAA,EAAQ,KAAA;IACRC,MAAAA,EAAQ,SAAA;IACRC,MAAAA,EAAQ;AACV,CAAA;AAEA;;AAEC,IACD,MAAMC,yBAAAA,GAA4B,CAChCC,IAAAA,EACAC,aAAAA,EACAC,UAEC;AACC,QAAA,GAAGD,aAAa;AAChBD,QAAAA,IAAAA;AACAE,QAAAA;KACF,CAAA;AAEF;;AAEC,IACD,MAAMC,wBAAAA,GAA2B,CAC/BC,OAAAA,EACAC,OAAAA,EACAhB,SAAAA,GAAAA;AAEA,IAAA,IAAI,CAACgB,OAAAA,EAAS;QACZ,OAAO,KAAA;AACT,IAAA;;IAGA,IAAIhB,SAAAA,EAAWa,WAAW,KAAA,EAAO;QAC/B,OAAO,KAAA;AACT,IAAA;;IAGA,MAAMI,oBAAAA,GAAuBC,KAAKH,OAAAA,EAAS;AAAC,QAAA;AAAS,KAAA,CAAA;IACrD,MAAMI,oBAAAA,GAAuBD,KAAKF,OAAAA,EAAS;AAAC,QAAA;AAAS,KAAA,CAAA;IAErD,IAAI,CAACI,OAAAA,CAAQH,oBAAAA,EAAsBE,oBAAAA,CAAAA,EAAuB;QACxD,OAAO,SAAA;AACT,IAAA;;AAGA,IAAA,OAAOH,QAAQH,MAAM;AACvB,CAAA;AAEA;;IAGA,MAAMQ,4BAAAA,GAA+B,CACnCtB,MAAAA,EACAC,SAAAA,GAAAA;;IAGA,IAAID,MAAAA,CAAOuB,MAAM,EAAE;AACjB,QAAA,OAAOhB,gBAAgB,CAACP,MAAAA,CAAOuB,MAAM,CAAC;AACxC,IAAA;;AAGA,IAAA,IAAI,CAACtB,SAAAA,EAAW;QACd,OAAO,KAAA;AACT,IAAA;;AAGA,IAAA,OAAOA,UAAUa,MAAM;AACzB,CAAA;AAEA;;;UAIaU,gCAAAA,GAAmC,CAC9C,EAAED,MAAM,EAAEE,UAAU,EAAU,EAC9BxB,SAAAA,GAAAA;;IAGA,IAAIsB,MAAAA,KAAW,QAAA,IAAY,CAACtB,SAAAA,EAAW;AACrC,QAAA,OAAOyB,MAAAA,CAAOC,OAAO,CAACF,UAAAA,CAAAA,CAAYG,GAAG,CAAC,CAAC,CAAChB,IAAAA,EAAMiB,SAAAA,CAAU,GACtDlB,yBAAAA,CAA0BC,MAAMiB,SAAAA,EAAW,KAAA,CAAA,CAAA;AAE/C,IAAA;;IAGA,MAAMC,gBAAAA,GAAmB7B,UAAUwB,UAAU,CAACM,MAAM,CAClD,CAACC,GAAAA,EAAKC,IAAAA,IAAU;AAAE,YAAA,GAAGD,GAAG;YAAE,CAACC,IAAAA,CAAKrB,IAAI,GAAGqB;AAAK,SAAA,GAC5C,EAAC,CAAA;;IAIH,MAAMC,mBAAAA,GAAsBR,MAAAA,CAAOC,OAAO,CAACF,UAAAA,CAAAA,CAAYG,GAAG,CAAC,CAAC,CAAChB,IAAAA,EAAMqB,IAAAA,CAAK,GAAA;QACtE,MAAMhB,OAAAA,GAAUa,gBAAgB,CAAClB,IAAAA,CAAK;AACtC,QAAA,MAAME,SAASC,wBAAAA,CAAyB;AAAE,YAAA,GAAGkB,IAAI;AAAErB,YAAAA;AAAK,SAAA,EAAGK,OAAAA,EAAShB,SAAAA,CAAAA;QAEpE,OAAOU,yBAAAA,CAA0BC,MAAMqB,IAAAA,EAAMnB,MAAAA,CAAAA;AAC/C,IAAA,CAAA,CAAA;;;IAIA,IAAIb,SAAAA,EAAWa,WAAW,KAAA,EAAO;QAC/B,OAAOoB,mBAAAA;AACT,IAAA;;IAGA,MAAMC,iBAAAA,GAAoBT,MAAAA,CAAOC,OAAO,CAACG,gBAAAA,CAAAA,CACtCM,MAAM,CAAC,CAAC,CAACxB,IAAAA,CAAK,GAAK,CAACa,UAAU,CAACb,IAAAA,CAAK,CAAA,CACpCgB,GAAG,CAAC,CAAC,CAAChB,IAAAA,EAAMK,OAAAA,CAAQ,GAAKN,yBAAAA,CAA0BC,IAAAA,EAAMK,OAAAA,EAAS,SAAA,CAAA,CAAA;;IAGrE,OAAO;AAAIiB,QAAAA,GAAAA,mBAAAA;AAAwBC,QAAAA,GAAAA;AAAkB,KAAA;AACvD;AAEA;;;;;;;AAOC,IACM,MAAME,kBAAAA,GAAqB,CAChCrC,MAAAA,EACAC,SAAAA,GAAAA;IAEA,MAAMqC,YAAAA,GAAeC,SAAAA,CAAUC,QAAQ,CAACxC,MAAAA,CAAOY,IAAI,CAAA,CAAE6B,WAAW,EAAA,CAAGC,OAAO,CAAC,IAAA,EAAM,GAAA,CAAA;IACjF,MAAMC,UAAAA,GAAaJ,SAAAA,CAAUK,MAAM,CAAC5C,MAAAA,CAAOY,IAAI,CAAA,CAAE6B,WAAW,EAAA,CAAGC,OAAO,CAAC,IAAA,EAAM,GAAA,CAAA;IAE7E,IAAI1C,MAAAA,CAAOG,SAAS,KAAK,WAAA,EAAa;QACpC,OAAO;YACL0C,QAAAA,EAAU7C,MAAAA,CAAO6C,QAAQ,IAAI,SAAA;YAC7BC,SAAAA,EAAWR,YAAAA;AACXb,YAAAA,UAAAA,EAAYD,iCAAiCxB,MAAAA,EAAQC,SAAAA,CAAAA;YACrD8C,IAAAA,EAAM;AACJC,gBAAAA,WAAAA,EAAahD,OAAOY,IAAI;AACxBqC,gBAAAA,WAAAA,EAAajD,OAAOiD;AAGtB,aAAA;AACA9C,YAAAA,SAAAA,EAAWH,OAAOG,SAAS;AAC3BR,YAAAA,GAAAA,EAAKK,OAAOL,GAAG;YACfuD,cAAAA,EAAgBP,UAAAA;AAChB7B,YAAAA,MAAAA,EAAQQ,6BAA6BtB,MAAAA,EAAQC,SAAAA,CAAAA;YAC7CkD,QAAAA,EAAUb;AACZ,SAAA;AACF,IAAA;AAEA,IAAA,MAAMc,mBAAAA,GAAsBnD,SAAAA,EAAWE,SAAAA,KAAc,aAAA,GAAgBF,SAAAA,GAAYoD,SAAAA;AACjF,IAAA,MAAMvD,OAAOD,iBAAAA,CAAkBG,MAAAA,CAAOF,IAAI,CAAA,GAAIE,MAAAA,CAAOF,IAAI,GAAG,gBAAA;AAE5D,IAAA,MAAMwD,eAAAA,GAAkB;AACtB3D,QAAAA,GAAAA,EAAKK,OAAOL,GAAG;QACfQ,SAAAA,EAAW,aAAA;QACX2C,SAAAA,EAAWR,YAAAA;AACXxC,QAAAA,IAAAA;QACAiD,IAAAA,EAAM;AACJC,YAAAA,WAAAA,EAAahD,MAAAA,CAAOY,IAAI,CAAC2C,MAAM,CAAC,CAAA,CAAA,CAAGC,WAAW,EAAA,GAAKxD,MAAAA,CAAOY,IAAI,CAAC6C,KAAK,CAAC,CAAA,CAAA;;YAErEnB,YAAAA,EAAcc,mBAAAA,EAAqBL,KAAKT,YAAAA,IAAgBA,YAAAA;;YAExDK,UAAAA,EAAYS,mBAAAA,EAAqBL,KAAKJ,UAAAA,IAAcA;AACtD,SAAA;QACAO,cAAAA,EAAgBP,UAAAA;AAChBlB,QAAAA,UAAAA,EAAYD,iCAAiCxB,MAAAA,EAAQC,SAAAA,CAAAA;QACrDyD,OAAAA,EAAS;YACPC,eAAAA,EAAiB3D,MAAAA,CAAO0D,OAAO,EAAEC,eAAAA,IAAmB;AACtD,SAAA;QACAC,aAAAA,EAAe;YACbC,IAAAA,EAAM;gBACJC,SAAAA,EAAW9D,MAAAA,CAAO0D,OAAO,EAAEI,SAAAA,IAAa;AAC1C;AACF,SAAA;QACAC,OAAAA,EAAS,IAAA;AACTjD,QAAAA,MAAAA,EAAQQ,6BAA6BtB,MAAAA,EAAQC,SAAAA,CAAAA;QAC7CkD,QAAAA,EAAUb,YAAAA;QACV0B,mBAAAA,EAAqB;AACvB,KAAA;AAEA,IAAA,IACEjE,oBAAoBC,MAAAA,EAAQC,SAAAA,CAAAA,IAC5BA,aACAA,SAAAA,CAAUE,SAAS,KAAK,aAAA,EACxB;AACA,QAAA,MAAM8D,IAAAA,GAAOhE,SAAAA;QACb,OAAO;AACL,YAAA,GAAGqD,eAAe;AAClBpD,YAAAA,MAAAA,EAAQ+D,IAAAA,CAAK/D,MAAM,IAAIF,MAAAA,CAAOE,MAAM;AACpCiD,YAAAA,QAAAA,EAAUc,KAAKd,QAAQ;AACvBL,YAAAA,SAAAA,EAAWmB,KAAKnB,SAAS;AACzBI,YAAAA,cAAAA,EAAgBe,KAAKf,cAAc;YACnCH,IAAAA,EAAM;AACJ,gBAAA,GAAGO,gBAAgBP,IAAI;gBACvBT,YAAAA,EAAc2B,IAAAA,CAAKlB,IAAI,CAACT,YAAY;gBACpCK,UAAAA,EAAYsB,IAAAA,CAAKlB,IAAI,CAACJ;AACxB,aAAA;YACAe,OAAAA,EAAS;AACP,gBAAA,GAAGO,KAAKP,OAAO;AACf,gBAAA,GAAGJ,gBAAgBI,OAAO;AAC1BC,gBAAAA,eAAAA,EAAiB3D,OAAO0D,OAAO,EAAEC,mBAAmBM,IAAAA,CAAKP,OAAO,EAAEC,eAAAA,IAAmB;AACvF,aAAA;YACAC,aAAAA,EAAe;AACb,gBAAA,GAAGK,KAAKL,aAAa;AACrB,gBAAA,GAAGN,gBAAgBM,aAAa;gBAChCC,IAAAA,EAAM;oBACJ,GAAII,IAAAA,CAAKL,aAAa,EAAEC,IAAI;oBAC5B,GAAIP,eAAAA,CAAgBM,aAAa,EAAEC,IAAI;oBACvCC,SAAAA,EACE9D,MAAAA,CAAO0D,OAAO,EAAEI,SAAAA,IACfG,KAAKL,aAAa,EAAEC,MAA8CC,SAAAA,IACnE;AACJ;AACF,aAAA;AACAC,YAAAA,OAAAA,EAASE,KAAKF,OAAO;AACrBC,YAAAA,mBAAAA,EAAqBC,KAAKD;AAC5B,SAAA;AACF,IAAA;AAEA,IAAA,IAAIjE,mBAAAA,CAAoBC,MAAAA,EAAQC,SAAAA,CAAAA,IAAcD,MAAAA,CAAOE,MAAM,EAAE;QAC3D,OAAO;AACL,YAAA,GAAGoD,eAAe;AAClBpD,YAAAA,MAAAA,EAAQF,OAAOE;AACjB,SAAA;AACF,IAAA;IAEA,OAAOoD,eAAAA;AACT;;;;"}
@@ -18,7 +18,7 @@ var useCTBSession = require('./useCTBSession.js');
18
18
  const { sessionId } = useCTBSession.useCTBSession();
19
19
  const trackUsage = React.useCallback((event, properties)=>{
20
20
  const enhancedProperties = {
21
- ...properties ?? {},
21
+ ...properties,
22
22
  ctbSessionId: sessionId
23
23
  };
24
24
  // The admin tracking API is typed for declared events, but CTB emits extension events too.
@@ -1 +1 @@
1
- {"version":3,"file":"useCTBTracking.js","sources":["../../../../admin/src/components/CTBSession/useCTBTracking.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\n\nimport { useCTBSession } from './useCTBSession';\n\ntype TrackUsageWithDynamicEvent = (\n event: string,\n properties: Record<string, unknown>\n) => ReturnType<ReturnType<typeof useTracking>['trackUsage']>;\n\n/**\n * Hook that provides tracking functionality with automatic CTB session ID inclusion.\n * This version accepts arbitrary event names (string) to allow feature-specific\n * events that are not yet declared in the central tracking typings.\n *\n * Note: this intentionally relaxes TypeScript restrictions so callers can\n * emit new tracking event names without needing to update the upstream\n * tracking type definitions. The session ID is merged into the properties\n * object before forwarding to the original tracking implementation.\n */\nexport const useCTBTracking = () => {\n const { trackUsage: originalTrackUsage } = useTracking();\n const { sessionId } = useCTBSession();\n\n const trackUsage = useCallback(\n (event: string, properties?: Record<string, unknown>) => {\n const enhancedProperties = {\n ...(properties ?? {}),\n ctbSessionId: sessionId,\n };\n\n // The admin tracking API is typed for declared events, but CTB emits extension events too.\n const trackDynamicEvent = originalTrackUsage as unknown as TrackUsageWithDynamicEvent;\n\n return trackDynamicEvent(event, enhancedProperties);\n },\n [originalTrackUsage, sessionId]\n );\n\n return { trackUsage };\n};\n"],"names":["useCTBTracking","trackUsage","originalTrackUsage","useTracking","sessionId","useCTBSession","useCallback","event","properties","enhancedProperties","ctbSessionId","trackDynamicEvent"],"mappings":";;;;;;AAWA;;;;;;;;;UAUaA,cAAAA,GAAiB,IAAA;AAC5B,IAAA,MAAM,EAAEC,UAAAA,EAAYC,kBAAkB,EAAE,GAAGC,uBAAAA,EAAAA;IAC3C,MAAM,EAAEC,SAAS,EAAE,GAAGC,2BAAAA,EAAAA;IAEtB,MAAMJ,UAAAA,GAAaK,iBAAAA,CACjB,CAACC,KAAAA,EAAeC,UAAAA,GAAAA;AACd,QAAA,MAAMC,kBAAAA,GAAqB;YACzB,GAAID,UAAAA,IAAc,EAAE;YACpBE,YAAAA,EAAcN;AAChB,SAAA;;AAGA,QAAA,MAAMO,iBAAAA,GAAoBT,kBAAAA;AAE1B,QAAA,OAAOS,kBAAkBJ,KAAAA,EAAOE,kBAAAA,CAAAA;IAClC,CAAA,EACA;AAACP,QAAAA,kBAAAA;AAAoBE,QAAAA;AAAU,KAAA,CAAA;IAGjC,OAAO;AAAEH,QAAAA;AAAW,KAAA;AACtB;;;;"}
1
+ {"version":3,"file":"useCTBTracking.js","sources":["../../../../admin/src/components/CTBSession/useCTBTracking.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\n\nimport { useCTBSession } from './useCTBSession';\n\ntype TrackUsageWithDynamicEvent = (\n event: string,\n properties: Record<string, unknown>\n) => ReturnType<ReturnType<typeof useTracking>['trackUsage']>;\n\n/**\n * Hook that provides tracking functionality with automatic CTB session ID inclusion.\n * This version accepts arbitrary event names (string) to allow feature-specific\n * events that are not yet declared in the central tracking typings.\n *\n * Note: this intentionally relaxes TypeScript restrictions so callers can\n * emit new tracking event names without needing to update the upstream\n * tracking type definitions. The session ID is merged into the properties\n * object before forwarding to the original tracking implementation.\n */\nexport const useCTBTracking = () => {\n const { trackUsage: originalTrackUsage } = useTracking();\n const { sessionId } = useCTBSession();\n\n const trackUsage = useCallback(\n (event: string, properties?: Record<string, unknown>) => {\n const enhancedProperties = {\n ...properties,\n ctbSessionId: sessionId,\n };\n\n // The admin tracking API is typed for declared events, but CTB emits extension events too.\n const trackDynamicEvent = originalTrackUsage as unknown as TrackUsageWithDynamicEvent;\n\n return trackDynamicEvent(event, enhancedProperties);\n },\n [originalTrackUsage, sessionId]\n );\n\n return { trackUsage };\n};\n"],"names":["useCTBTracking","trackUsage","originalTrackUsage","useTracking","sessionId","useCTBSession","useCallback","event","properties","enhancedProperties","ctbSessionId","trackDynamicEvent"],"mappings":";;;;;;AAWA;;;;;;;;;UAUaA,cAAAA,GAAiB,IAAA;AAC5B,IAAA,MAAM,EAAEC,UAAAA,EAAYC,kBAAkB,EAAE,GAAGC,uBAAAA,EAAAA;IAC3C,MAAM,EAAEC,SAAS,EAAE,GAAGC,2BAAAA,EAAAA;IAEtB,MAAMJ,UAAAA,GAAaK,iBAAAA,CACjB,CAACC,KAAAA,EAAeC,UAAAA,GAAAA;AACd,QAAA,MAAMC,kBAAAA,GAAqB;AACzB,YAAA,GAAGD,UAAU;YACbE,YAAAA,EAAcN;AAChB,SAAA;;AAGA,QAAA,MAAMO,iBAAAA,GAAoBT,kBAAAA;AAE1B,QAAA,OAAOS,kBAAkBJ,KAAAA,EAAOE,kBAAAA,CAAAA;IAClC,CAAA,EACA;AAACP,QAAAA,kBAAAA;AAAoBE,QAAAA;AAAU,KAAA,CAAA;IAGjC,OAAO;AAAEH,QAAAA;AAAW,KAAA;AACtB;;;;"}
@@ -16,7 +16,7 @@ import { useCTBSession } from './useCTBSession.mjs';
16
16
  const { sessionId } = useCTBSession();
17
17
  const trackUsage = useCallback((event, properties)=>{
18
18
  const enhancedProperties = {
19
- ...properties ?? {},
19
+ ...properties,
20
20
  ctbSessionId: sessionId
21
21
  };
22
22
  // The admin tracking API is typed for declared events, but CTB emits extension events too.
@@ -1 +1 @@
1
- {"version":3,"file":"useCTBTracking.mjs","sources":["../../../../admin/src/components/CTBSession/useCTBTracking.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\n\nimport { useCTBSession } from './useCTBSession';\n\ntype TrackUsageWithDynamicEvent = (\n event: string,\n properties: Record<string, unknown>\n) => ReturnType<ReturnType<typeof useTracking>['trackUsage']>;\n\n/**\n * Hook that provides tracking functionality with automatic CTB session ID inclusion.\n * This version accepts arbitrary event names (string) to allow feature-specific\n * events that are not yet declared in the central tracking typings.\n *\n * Note: this intentionally relaxes TypeScript restrictions so callers can\n * emit new tracking event names without needing to update the upstream\n * tracking type definitions. The session ID is merged into the properties\n * object before forwarding to the original tracking implementation.\n */\nexport const useCTBTracking = () => {\n const { trackUsage: originalTrackUsage } = useTracking();\n const { sessionId } = useCTBSession();\n\n const trackUsage = useCallback(\n (event: string, properties?: Record<string, unknown>) => {\n const enhancedProperties = {\n ...(properties ?? {}),\n ctbSessionId: sessionId,\n };\n\n // The admin tracking API is typed for declared events, but CTB emits extension events too.\n const trackDynamicEvent = originalTrackUsage as unknown as TrackUsageWithDynamicEvent;\n\n return trackDynamicEvent(event, enhancedProperties);\n },\n [originalTrackUsage, sessionId]\n );\n\n return { trackUsage };\n};\n"],"names":["useCTBTracking","trackUsage","originalTrackUsage","useTracking","sessionId","useCTBSession","useCallback","event","properties","enhancedProperties","ctbSessionId","trackDynamicEvent"],"mappings":";;;;AAWA;;;;;;;;;UAUaA,cAAAA,GAAiB,IAAA;AAC5B,IAAA,MAAM,EAAEC,UAAAA,EAAYC,kBAAkB,EAAE,GAAGC,WAAAA,EAAAA;IAC3C,MAAM,EAAEC,SAAS,EAAE,GAAGC,aAAAA,EAAAA;IAEtB,MAAMJ,UAAAA,GAAaK,WAAAA,CACjB,CAACC,KAAAA,EAAeC,UAAAA,GAAAA;AACd,QAAA,MAAMC,kBAAAA,GAAqB;YACzB,GAAID,UAAAA,IAAc,EAAE;YACpBE,YAAAA,EAAcN;AAChB,SAAA;;AAGA,QAAA,MAAMO,iBAAAA,GAAoBT,kBAAAA;AAE1B,QAAA,OAAOS,kBAAkBJ,KAAAA,EAAOE,kBAAAA,CAAAA;IAClC,CAAA,EACA;AAACP,QAAAA,kBAAAA;AAAoBE,QAAAA;AAAU,KAAA,CAAA;IAGjC,OAAO;AAAEH,QAAAA;AAAW,KAAA;AACtB;;;;"}
1
+ {"version":3,"file":"useCTBTracking.mjs","sources":["../../../../admin/src/components/CTBSession/useCTBTracking.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\n\nimport { useCTBSession } from './useCTBSession';\n\ntype TrackUsageWithDynamicEvent = (\n event: string,\n properties: Record<string, unknown>\n) => ReturnType<ReturnType<typeof useTracking>['trackUsage']>;\n\n/**\n * Hook that provides tracking functionality with automatic CTB session ID inclusion.\n * This version accepts arbitrary event names (string) to allow feature-specific\n * events that are not yet declared in the central tracking typings.\n *\n * Note: this intentionally relaxes TypeScript restrictions so callers can\n * emit new tracking event names without needing to update the upstream\n * tracking type definitions. The session ID is merged into the properties\n * object before forwarding to the original tracking implementation.\n */\nexport const useCTBTracking = () => {\n const { trackUsage: originalTrackUsage } = useTracking();\n const { sessionId } = useCTBSession();\n\n const trackUsage = useCallback(\n (event: string, properties?: Record<string, unknown>) => {\n const enhancedProperties = {\n ...properties,\n ctbSessionId: sessionId,\n };\n\n // The admin tracking API is typed for declared events, but CTB emits extension events too.\n const trackDynamicEvent = originalTrackUsage as unknown as TrackUsageWithDynamicEvent;\n\n return trackDynamicEvent(event, enhancedProperties);\n },\n [originalTrackUsage, sessionId]\n );\n\n return { trackUsage };\n};\n"],"names":["useCTBTracking","trackUsage","originalTrackUsage","useTracking","sessionId","useCTBSession","useCallback","event","properties","enhancedProperties","ctbSessionId","trackDynamicEvent"],"mappings":";;;;AAWA;;;;;;;;;UAUaA,cAAAA,GAAiB,IAAA;AAC5B,IAAA,MAAM,EAAEC,UAAAA,EAAYC,kBAAkB,EAAE,GAAGC,WAAAA,EAAAA;IAC3C,MAAM,EAAEC,SAAS,EAAE,GAAGC,aAAAA,EAAAA;IAEtB,MAAMJ,UAAAA,GAAaK,WAAAA,CACjB,CAACC,KAAAA,EAAeC,UAAAA,GAAAA;AACd,QAAA,MAAMC,kBAAAA,GAAqB;AACzB,YAAA,GAAGD,UAAU;YACbE,YAAAA,EAAcN;AAChB,SAAA;;AAGA,QAAA,MAAMO,iBAAAA,GAAoBT,kBAAAA;AAE1B,QAAA,OAAOS,kBAAkBJ,KAAAA,EAAOE,kBAAAA,CAAAA;IAClC,CAAA,EACA;AAACP,QAAAA,kBAAAA;AAAoBE,QAAAA;AAAU,KAAA,CAAA;IAGjC,OAAO;AAAEH,QAAAA;AAAW,KAAA;AACtB;;;;"}
@@ -20,7 +20,7 @@ const useServerRestartWatcher = ()=>{
20
20
  }, 200);
21
21
  });
22
22
  }
23
- } catch (err) {
23
+ } catch {
24
24
  return new Promise((resolve)=>{
25
25
  setTimeout(()=>{
26
26
  return serverRestartWatcher(startTime).then(resolve);
@@ -1 +1 @@
1
- {"version":3,"file":"useServerRestartWatcher.js","sources":["../../../../admin/src/components/DataManager/useServerRestartWatcher.ts"],"sourcesContent":["import { useFetchClient } from '@strapi/admin/strapi-admin';\n\nconst TIMEOUT = 'timeout';\n\nconst timeout = 30 * 1000;\n\ntype UpdateSchemaStatusResponse = {\n data?: {\n isUpdating?: boolean;\n };\n};\n\nexport const useServerRestartWatcher = () => {\n const { get } = useFetchClient();\n\n const serverRestartWatcher = async (initTime?: number) => {\n const startTime = initTime ?? Date.now();\n\n if (Date.now() - startTime > timeout) {\n throw new Error(TIMEOUT);\n }\n\n try {\n const res = await get<UpdateSchemaStatusResponse>(\n `/content-type-builder/update-schema-status`\n );\n\n if (res?.data?.data?.isUpdating === true) {\n return new Promise((resolve) => {\n setTimeout(() => {\n return serverRestartWatcher(startTime).then(resolve);\n }, 200);\n });\n }\n } catch (err) {\n return new Promise((resolve) => {\n setTimeout(() => {\n return serverRestartWatcher(startTime).then(resolve);\n }, 200);\n });\n }\n };\n\n return serverRestartWatcher;\n};\n"],"names":["TIMEOUT","timeout","useServerRestartWatcher","get","useFetchClient","serverRestartWatcher","initTime","startTime","Date","now","Error","res","data","isUpdating","Promise","resolve","setTimeout","then","err"],"mappings":";;;;AAEA,MAAMA,OAAAA,GAAU,SAAA;AAEhB,MAAMC,UAAU,EAAA,GAAK,IAAA;MAQRC,uBAAAA,GAA0B,IAAA;IACrC,MAAM,EAAEC,GAAG,EAAE,GAAGC,0BAAAA,EAAAA;AAEhB,IAAA,MAAMC,uBAAuB,OAAOC,QAAAA,GAAAA;QAClC,MAAMC,SAAAA,GAAYD,QAAAA,IAAYE,IAAAA,CAAKC,GAAG,EAAA;AAEtC,QAAA,IAAID,IAAAA,CAAKC,GAAG,EAAA,GAAKF,SAAAA,GAAYN,OAAAA,EAAS;AACpC,YAAA,MAAM,IAAIS,KAAAA,CAAMV,OAAAA,CAAAA;AAClB,QAAA;QAEA,IAAI;AACF,YAAA,MAAMW,GAAAA,GAAM,MAAMR,GAAAA,CAChB,CAAC,0CAA0C,CAAC,CAAA;AAG9C,YAAA,IAAIQ,GAAAA,EAAKC,IAAAA,EAAMA,IAAAA,EAAMC,UAAAA,KAAe,IAAA,EAAM;gBACxC,OAAO,IAAIC,QAAQ,CAACC,OAAAA,GAAAA;oBAClBC,UAAAA,CAAW,IAAA;wBACT,OAAOX,oBAAAA,CAAqBE,SAAAA,CAAAA,CAAWU,IAAI,CAACF,OAAAA,CAAAA;oBAC9C,CAAA,EAAG,GAAA,CAAA;AACL,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,QAAA,CAAA,CAAE,OAAOG,GAAAA,EAAK;YACZ,OAAO,IAAIJ,QAAQ,CAACC,OAAAA,GAAAA;gBAClBC,UAAAA,CAAW,IAAA;oBACT,OAAOX,oBAAAA,CAAqBE,SAAAA,CAAAA,CAAWU,IAAI,CAACF,OAAAA,CAAAA;gBAC9C,CAAA,EAAG,GAAA,CAAA;AACL,YAAA,CAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;IAEA,OAAOV,oBAAAA;AACT;;;;"}
1
+ {"version":3,"file":"useServerRestartWatcher.js","sources":["../../../../admin/src/components/DataManager/useServerRestartWatcher.ts"],"sourcesContent":["import { useFetchClient } from '@strapi/admin/strapi-admin';\n\nconst TIMEOUT = 'timeout';\n\nconst timeout = 30 * 1000;\n\ntype UpdateSchemaStatusResponse = {\n data?: {\n isUpdating?: boolean;\n };\n};\n\nexport const useServerRestartWatcher = () => {\n const { get } = useFetchClient();\n\n const serverRestartWatcher = async (initTime?: number) => {\n const startTime = initTime ?? Date.now();\n\n if (Date.now() - startTime > timeout) {\n throw new Error(TIMEOUT);\n }\n\n try {\n const res = await get<UpdateSchemaStatusResponse>(\n `/content-type-builder/update-schema-status`\n );\n\n if (res?.data?.data?.isUpdating === true) {\n return new Promise((resolve) => {\n setTimeout(() => {\n return serverRestartWatcher(startTime).then(resolve);\n }, 200);\n });\n }\n } catch {\n return new Promise((resolve) => {\n setTimeout(() => {\n return serverRestartWatcher(startTime).then(resolve);\n }, 200);\n });\n }\n };\n\n return serverRestartWatcher;\n};\n"],"names":["TIMEOUT","timeout","useServerRestartWatcher","get","useFetchClient","serverRestartWatcher","initTime","startTime","Date","now","Error","res","data","isUpdating","Promise","resolve","setTimeout","then"],"mappings":";;;;AAEA,MAAMA,OAAAA,GAAU,SAAA;AAEhB,MAAMC,UAAU,EAAA,GAAK,IAAA;MAQRC,uBAAAA,GAA0B,IAAA;IACrC,MAAM,EAAEC,GAAG,EAAE,GAAGC,0BAAAA,EAAAA;AAEhB,IAAA,MAAMC,uBAAuB,OAAOC,QAAAA,GAAAA;QAClC,MAAMC,SAAAA,GAAYD,QAAAA,IAAYE,IAAAA,CAAKC,GAAG,EAAA;AAEtC,QAAA,IAAID,IAAAA,CAAKC,GAAG,EAAA,GAAKF,SAAAA,GAAYN,OAAAA,EAAS;AACpC,YAAA,MAAM,IAAIS,KAAAA,CAAMV,OAAAA,CAAAA;AAClB,QAAA;QAEA,IAAI;AACF,YAAA,MAAMW,GAAAA,GAAM,MAAMR,GAAAA,CAChB,CAAC,0CAA0C,CAAC,CAAA;AAG9C,YAAA,IAAIQ,GAAAA,EAAKC,IAAAA,EAAMA,IAAAA,EAAMC,UAAAA,KAAe,IAAA,EAAM;gBACxC,OAAO,IAAIC,QAAQ,CAACC,OAAAA,GAAAA;oBAClBC,UAAAA,CAAW,IAAA;wBACT,OAAOX,oBAAAA,CAAqBE,SAAAA,CAAAA,CAAWU,IAAI,CAACF,OAAAA,CAAAA;oBAC9C,CAAA,EAAG,GAAA,CAAA;AACL,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;YACN,OAAO,IAAID,QAAQ,CAACC,OAAAA,GAAAA;gBAClBC,UAAAA,CAAW,IAAA;oBACT,OAAOX,oBAAAA,CAAqBE,SAAAA,CAAAA,CAAWU,IAAI,CAACF,OAAAA,CAAAA;gBAC9C,CAAA,EAAG,GAAA,CAAA;AACL,YAAA,CAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;IAEA,OAAOV,oBAAAA;AACT;;;;"}
@@ -18,7 +18,7 @@ const useServerRestartWatcher = ()=>{
18
18
  }, 200);
19
19
  });
20
20
  }
21
- } catch (err) {
21
+ } catch {
22
22
  return new Promise((resolve)=>{
23
23
  setTimeout(()=>{
24
24
  return serverRestartWatcher(startTime).then(resolve);
@@ -1 +1 @@
1
- {"version":3,"file":"useServerRestartWatcher.mjs","sources":["../../../../admin/src/components/DataManager/useServerRestartWatcher.ts"],"sourcesContent":["import { useFetchClient } from '@strapi/admin/strapi-admin';\n\nconst TIMEOUT = 'timeout';\n\nconst timeout = 30 * 1000;\n\ntype UpdateSchemaStatusResponse = {\n data?: {\n isUpdating?: boolean;\n };\n};\n\nexport const useServerRestartWatcher = () => {\n const { get } = useFetchClient();\n\n const serverRestartWatcher = async (initTime?: number) => {\n const startTime = initTime ?? Date.now();\n\n if (Date.now() - startTime > timeout) {\n throw new Error(TIMEOUT);\n }\n\n try {\n const res = await get<UpdateSchemaStatusResponse>(\n `/content-type-builder/update-schema-status`\n );\n\n if (res?.data?.data?.isUpdating === true) {\n return new Promise((resolve) => {\n setTimeout(() => {\n return serverRestartWatcher(startTime).then(resolve);\n }, 200);\n });\n }\n } catch (err) {\n return new Promise((resolve) => {\n setTimeout(() => {\n return serverRestartWatcher(startTime).then(resolve);\n }, 200);\n });\n }\n };\n\n return serverRestartWatcher;\n};\n"],"names":["TIMEOUT","timeout","useServerRestartWatcher","get","useFetchClient","serverRestartWatcher","initTime","startTime","Date","now","Error","res","data","isUpdating","Promise","resolve","setTimeout","then","err"],"mappings":";;AAEA,MAAMA,OAAAA,GAAU,SAAA;AAEhB,MAAMC,UAAU,EAAA,GAAK,IAAA;MAQRC,uBAAAA,GAA0B,IAAA;IACrC,MAAM,EAAEC,GAAG,EAAE,GAAGC,cAAAA,EAAAA;AAEhB,IAAA,MAAMC,uBAAuB,OAAOC,QAAAA,GAAAA;QAClC,MAAMC,SAAAA,GAAYD,QAAAA,IAAYE,IAAAA,CAAKC,GAAG,EAAA;AAEtC,QAAA,IAAID,IAAAA,CAAKC,GAAG,EAAA,GAAKF,SAAAA,GAAYN,OAAAA,EAAS;AACpC,YAAA,MAAM,IAAIS,KAAAA,CAAMV,OAAAA,CAAAA;AAClB,QAAA;QAEA,IAAI;AACF,YAAA,MAAMW,GAAAA,GAAM,MAAMR,GAAAA,CAChB,CAAC,0CAA0C,CAAC,CAAA;AAG9C,YAAA,IAAIQ,GAAAA,EAAKC,IAAAA,EAAMA,IAAAA,EAAMC,UAAAA,KAAe,IAAA,EAAM;gBACxC,OAAO,IAAIC,QAAQ,CAACC,OAAAA,GAAAA;oBAClBC,UAAAA,CAAW,IAAA;wBACT,OAAOX,oBAAAA,CAAqBE,SAAAA,CAAAA,CAAWU,IAAI,CAACF,OAAAA,CAAAA;oBAC9C,CAAA,EAAG,GAAA,CAAA;AACL,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,QAAA,CAAA,CAAE,OAAOG,GAAAA,EAAK;YACZ,OAAO,IAAIJ,QAAQ,CAACC,OAAAA,GAAAA;gBAClBC,UAAAA,CAAW,IAAA;oBACT,OAAOX,oBAAAA,CAAqBE,SAAAA,CAAAA,CAAWU,IAAI,CAACF,OAAAA,CAAAA;gBAC9C,CAAA,EAAG,GAAA,CAAA;AACL,YAAA,CAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;IAEA,OAAOV,oBAAAA;AACT;;;;"}
1
+ {"version":3,"file":"useServerRestartWatcher.mjs","sources":["../../../../admin/src/components/DataManager/useServerRestartWatcher.ts"],"sourcesContent":["import { useFetchClient } from '@strapi/admin/strapi-admin';\n\nconst TIMEOUT = 'timeout';\n\nconst timeout = 30 * 1000;\n\ntype UpdateSchemaStatusResponse = {\n data?: {\n isUpdating?: boolean;\n };\n};\n\nexport const useServerRestartWatcher = () => {\n const { get } = useFetchClient();\n\n const serverRestartWatcher = async (initTime?: number) => {\n const startTime = initTime ?? Date.now();\n\n if (Date.now() - startTime > timeout) {\n throw new Error(TIMEOUT);\n }\n\n try {\n const res = await get<UpdateSchemaStatusResponse>(\n `/content-type-builder/update-schema-status`\n );\n\n if (res?.data?.data?.isUpdating === true) {\n return new Promise((resolve) => {\n setTimeout(() => {\n return serverRestartWatcher(startTime).then(resolve);\n }, 200);\n });\n }\n } catch {\n return new Promise((resolve) => {\n setTimeout(() => {\n return serverRestartWatcher(startTime).then(resolve);\n }, 200);\n });\n }\n };\n\n return serverRestartWatcher;\n};\n"],"names":["TIMEOUT","timeout","useServerRestartWatcher","get","useFetchClient","serverRestartWatcher","initTime","startTime","Date","now","Error","res","data","isUpdating","Promise","resolve","setTimeout","then"],"mappings":";;AAEA,MAAMA,OAAAA,GAAU,SAAA;AAEhB,MAAMC,UAAU,EAAA,GAAK,IAAA;MAQRC,uBAAAA,GAA0B,IAAA;IACrC,MAAM,EAAEC,GAAG,EAAE,GAAGC,cAAAA,EAAAA;AAEhB,IAAA,MAAMC,uBAAuB,OAAOC,QAAAA,GAAAA;QAClC,MAAMC,SAAAA,GAAYD,QAAAA,IAAYE,IAAAA,CAAKC,GAAG,EAAA;AAEtC,QAAA,IAAID,IAAAA,CAAKC,GAAG,EAAA,GAAKF,SAAAA,GAAYN,OAAAA,EAAS;AACpC,YAAA,MAAM,IAAIS,KAAAA,CAAMV,OAAAA,CAAAA;AAClB,QAAA;QAEA,IAAI;AACF,YAAA,MAAMW,GAAAA,GAAM,MAAMR,GAAAA,CAChB,CAAC,0CAA0C,CAAC,CAAA;AAG9C,YAAA,IAAIQ,GAAAA,EAAKC,IAAAA,EAAMA,IAAAA,EAAMC,UAAAA,KAAe,IAAA,EAAM;gBACxC,OAAO,IAAIC,QAAQ,CAACC,OAAAA,GAAAA;oBAClBC,UAAAA,CAAW,IAAA;wBACT,OAAOX,oBAAAA,CAAqBE,SAAAA,CAAAA,CAAWU,IAAI,CAACF,OAAAA,CAAAA;oBAC9C,CAAA,EAAG,GAAA,CAAA;AACL,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;YACN,OAAO,IAAID,QAAQ,CAACC,OAAAA,GAAAA;gBAClBC,UAAAA,CAAW,IAAA;oBACT,OAAOX,oBAAAA,CAAqBE,SAAAA,CAAAA,CAAWU,IAAI,CAACF,OAAAA,CAAAA;gBAC9C,CAAA,EAAG,GAAA,CAAA;AACL,YAAA,CAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;IAEA,OAAOV,oBAAAA;AACT;;;;"}
@@ -84,7 +84,7 @@ const convertToJsonLogic = (value)=>{
84
84
  [operator]: conditionRule
85
85
  }
86
86
  };
87
- } catch (error) {
87
+ } catch {
88
88
  return null;
89
89
  }
90
90
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionForm.js","sources":["../../../../../admin/src/components/FormModal/attributes/ConditionForm.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useState } from 'react';\n\nimport { createRulesEngine, ConfirmDialog, type Condition } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n Field,\n SingleSelect,\n SingleSelectOption,\n Dialog,\n} from '@strapi/design-system';\nimport { Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AttributeIcon } from '../../../components/AttributeIcon';\nimport { getFirstVisibleConditionEntry } from '../../../utils/conditions';\nimport { getTrad } from '../../../utils/getTrad';\nimport { ApplyConditionButton } from '../../ApplyConditionButton';\n\nimport type {\n AttributeConditions,\n AttributeConditionRule,\n AttributeConditionValue,\n} from '../../../types';\n\nconst SmallAttributeIcon = styled(AttributeIcon)`\n width: 16px !important;\n height: 16px !important;\n svg {\n width: 16px !important;\n height: 16px !important;\n }\n`;\n\ninterface ConditionFormProps {\n name: string;\n value?: AttributeConditions | null;\n onChange: (e: { target: { name: string; value?: AttributeConditions | null } }) => void;\n onDelete: () => void;\n attributeName?: string;\n conditionFields?: Array<{\n name: string;\n type: string;\n enum?: string[];\n }>;\n allAttributes?: Array<{\n name: string;\n type: string;\n }>;\n}\n\ninterface LocalValue {\n dependsOn: string;\n operator: 'is' | 'isNot';\n value: AttributeConditionValue;\n action: 'show' | 'hide';\n}\n\nconst convertFromJsonLogic = (jsonLogic?: AttributeConditions | null): LocalValue => {\n const conditionEntry = getFirstVisibleConditionEntry(jsonLogic);\n\n if (conditionEntry === null) {\n return {\n dependsOn: '',\n operator: 'is',\n value: '',\n action: 'show',\n };\n }\n\n const { operator, fieldVar, value } = conditionEntry;\n\n // Assume 'visible' implies 'show' for now; adjust if backend uses 'hidden' key\n return {\n dependsOn: fieldVar.var,\n operator: operator === '==' ? 'is' : 'isNot',\n value: value,\n action: 'show', // Default to 'show' for 'visible'; adjust based on backend logic\n };\n};\n\nconst convertToJsonLogic = (value: LocalValue): AttributeConditions | null => {\n if (value.dependsOn === '') {\n return null;\n }\n\n const rulesEngine = createRulesEngine();\n const condition: Condition = {\n dependsOn: value.dependsOn,\n operator: value.operator,\n value: value.value,\n };\n\n try {\n rulesEngine.validate(condition);\n // Determine JSON Logic operator based on operator and action\n const operator =\n (value.operator === 'is' && value.action === 'show') ||\n (value.operator === 'isNot' && value.action === 'hide')\n ? '=='\n : '!=';\n const conditionRule: AttributeConditionRule = [{ var: value.dependsOn }, value.value];\n return {\n visible: {\n [operator]: conditionRule,\n },\n };\n } catch (error) {\n return null;\n }\n};\n\nexport const ConditionForm = ({\n name,\n value,\n onChange,\n onDelete,\n attributeName,\n conditionFields = [],\n}: ConditionFormProps) => {\n const { formatMessage } = useIntl();\n const [localValue, setLocalValue] = React.useState<LocalValue>(convertFromJsonLogic(value));\n const [showConfirmDialog, setShowConfirmDialog] = useState(false);\n const hasCondition = getFirstVisibleConditionEntry(value) !== null;\n\n // Add safety check for conditionFields\n if (!Array.isArray(conditionFields)) {\n conditionFields = [];\n }\n\n const selectedField = conditionFields.find((field) => field.name === localValue.dependsOn);\n const isEnumField = selectedField?.type === 'enumeration';\n\n // Helper to update localValue and propagate JSON Logic\n const updateCondition = (updatedValue: LocalValue) => {\n setLocalValue(updatedValue);\n const rulesEngine = createRulesEngine();\n const condition: Condition = {\n dependsOn: updatedValue.dependsOn,\n operator: updatedValue.operator,\n value: updatedValue.value,\n };\n try {\n rulesEngine.validate(condition);\n const operator =\n (updatedValue.operator === 'is' && updatedValue.action === 'show') ||\n (updatedValue.operator === 'isNot' && updatedValue.action === 'hide')\n ? '=='\n : '!=';\n const conditionRule: AttributeConditionRule = [\n { var: updatedValue.dependsOn },\n updatedValue.value,\n ];\n const jsonLogic: AttributeConditions | null = updatedValue.dependsOn\n ? {\n visible: {\n [operator]: conditionRule,\n },\n }\n : null;\n if (jsonLogic) {\n onChange({\n target: {\n name,\n value: jsonLogic,\n },\n });\n }\n } catch {\n // Optionally, show an error to the user\n }\n };\n\n const handleApplyCondition = () => {\n const initialValue: LocalValue = {\n dependsOn: '',\n operator: 'is',\n value: '',\n action: 'show',\n };\n setLocalValue(initialValue);\n onChange({\n target: {\n name,\n value: convertToJsonLogic(initialValue),\n },\n });\n };\n\n const handleDelete = () => {\n setLocalValue({\n dependsOn: '',\n operator: 'is',\n value: '',\n action: 'show',\n });\n onChange({\n target: {\n name,\n value: null,\n },\n });\n onDelete();\n setShowConfirmDialog(false);\n };\n\n const handleFieldChange = (fieldName: string | number) => {\n const newValue = fieldName?.toString() || '';\n const field = conditionFields.find((f) => f.name === newValue);\n const isNewFieldEnum = field?.type === 'enumeration';\n const updatedValue: LocalValue = {\n ...localValue,\n dependsOn: newValue,\n value: newValue ? (isNewFieldEnum ? '' : false) : localValue.value,\n };\n updateCondition(updatedValue);\n };\n\n const handleOperatorChange = (operator: string | number) => {\n const newValue = operator?.toString() || 'is';\n const updatedValue: LocalValue = {\n ...localValue,\n operator: newValue as 'is' | 'isNot',\n };\n updateCondition(updatedValue);\n };\n\n const handleValueChange = (newValue: string | number) => {\n const value = isEnumField ? newValue?.toString() : newValue?.toString() === 'true';\n const updatedValue: LocalValue = { ...localValue, value };\n updateCondition(updatedValue);\n };\n\n const handleActionChange = (action: string | number) => {\n const newValue = action?.toString() || 'show';\n const updatedValue: LocalValue = {\n ...localValue,\n action: newValue as 'show' | 'hide',\n };\n updateCondition(updatedValue);\n };\n\n if (!hasCondition) {\n return (\n <Box padding={4} margin={4} hasRadius background=\"neutral0\" borderColor=\"neutral200\">\n <ApplyConditionButton onClick={handleApplyCondition} />\n </Box>\n );\n }\n\n return (\n <Box marginTop={2}>\n <Box\n background=\"neutral0\"\n hasRadius\n borderColor=\"neutral200\"\n borderWidth={0.5}\n borderStyle=\"solid\"\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\" padding={4}>\n <Typography variant=\"sigma\" textColor=\"neutral800\">\n {formatMessage(\n {\n id: getTrad('form.attribute.condition.title'),\n defaultMessage: 'Condition for {name}',\n },\n {\n name: <strong>{attributeName}</strong>,\n }\n )}\n </Typography>\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <IconButton label=\"Delete\">\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleDelete}>\n {formatMessage({\n id: getTrad('popUpWarning.bodyMessage.delete-condition'),\n defaultMessage: 'Are you sure you want to delete this condition?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </Flex>\n\n <Box background=\"neutral100\" padding={4}>\n <Box paddingBottom={2}>\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n style={{ textTransform: 'uppercase', letterSpacing: 1 }}\n >\n {formatMessage({ id: getTrad('form.attribute.condition.if'), defaultMessage: 'IF' })}\n </Typography>\n </Box>\n <Flex gap={4}>\n <Box minWidth={0} flex={1}>\n <Field.Root name={`${name}.field`}>\n <SingleSelect\n value={localValue.dependsOn}\n onChange={handleFieldChange}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.field'),\n defaultMessage: 'field',\n })}\n >\n {conditionFields.map((field) => (\n <SingleSelectOption key={field.name} value={field.name}>\n <Flex gap={2} alignItems=\"center\">\n <SmallAttributeIcon type={field.type} />\n <span>{field.name}</span>\n </Flex>\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Box>\n <Box minWidth={0} flex={1}>\n <Field.Root name={`${name}.operator`}>\n <SingleSelect\n value={localValue.operator}\n onChange={handleOperatorChange}\n disabled={!localValue.dependsOn}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.operator'),\n defaultMessage: 'condition',\n })}\n >\n <SingleSelectOption value=\"is\">\n {formatMessage({\n id: getTrad('form.attribute.condition.operator.is'),\n defaultMessage: 'is',\n })}\n </SingleSelectOption>\n <SingleSelectOption value=\"isNot\">\n {formatMessage({\n id: getTrad('form.attribute.condition.operator.isNot'),\n defaultMessage: 'is not',\n })}\n </SingleSelectOption>\n </SingleSelect>\n </Field.Root>\n </Box>\n\n <Box minWidth={0} flex={1}>\n <Field.Root name={`${name}.value`}>\n <SingleSelect\n value={localValue.value?.toString() || ''}\n onChange={handleValueChange}\n disabled={!localValue.dependsOn}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.value'),\n defaultMessage: 'value',\n })}\n >\n {isEnumField && selectedField?.enum ? (\n selectedField.enum.map((enumValue) => (\n <SingleSelectOption key={enumValue} value={enumValue}>\n {enumValue}\n </SingleSelectOption>\n ))\n ) : (\n <>\n <SingleSelectOption value=\"true\">\n {formatMessage({\n id: getTrad('form.attribute.condition.value.true'),\n defaultMessage: 'true',\n })}\n </SingleSelectOption>\n <SingleSelectOption value=\"false\">\n {formatMessage({\n id: getTrad('form.attribute.condition.value.false'),\n defaultMessage: 'false',\n })}\n </SingleSelectOption>\n </>\n )}\n </SingleSelect>\n </Field.Root>\n </Box>\n </Flex>\n </Box>\n\n <Box background=\"neutral100\" padding={4}>\n <Box paddingBottom={4}>\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n style={{ textTransform: 'uppercase', letterSpacing: 1 }}\n >\n {formatMessage({\n id: getTrad('form.attribute.condition.then'),\n defaultMessage: 'THEN',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={4}>\n <Field.Root name={`${name}.action`}>\n <SingleSelect\n value={localValue.action}\n onChange={handleActionChange}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.action'),\n defaultMessage: 'action',\n })}\n >\n <SingleSelectOption value=\"show\">\n Show <span style={{ fontWeight: 'bold' }}>{attributeName || name}</span>\n </SingleSelectOption>\n <SingleSelectOption value=\"hide\">\n Hide <span style={{ fontWeight: 'bold' }}>{attributeName || name}</span>\n </SingleSelectOption>\n </SingleSelect>\n </Field.Root>\n </Box>\n </Box>\n </Box>\n </Box>\n );\n};\n"],"names":["SmallAttributeIcon","styled","AttributeIcon","convertFromJsonLogic","jsonLogic","conditionEntry","getFirstVisibleConditionEntry","dependsOn","operator","value","action","fieldVar","var","convertToJsonLogic","rulesEngine","createRulesEngine","condition","validate","conditionRule","visible","error","ConditionForm","name","onChange","onDelete","attributeName","conditionFields","formatMessage","useIntl","localValue","setLocalValue","React","useState","showConfirmDialog","setShowConfirmDialog","hasCondition","Array","isArray","selectedField","find","field","isEnumField","type","updateCondition","updatedValue","target","handleApplyCondition","initialValue","handleDelete","handleFieldChange","fieldName","newValue","toString","f","isNewFieldEnum","handleOperatorChange","handleValueChange","handleActionChange","_jsx","Box","padding","margin","hasRadius","background","borderColor","ApplyConditionButton","onClick","marginTop","_jsxs","borderWidth","borderStyle","Flex","justifyContent","alignItems","Typography","variant","textColor","id","getTrad","defaultMessage","strong","Dialog","Root","open","onOpenChange","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","paddingBottom","style","textTransform","letterSpacing","gap","minWidth","flex","Field","SingleSelect","placeholder","map","SingleSelectOption","span","disabled","enum","enumValue","_Fragment","fontWeight"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,MAAMA,kBAAAA,GAAqBC,uBAAAA,CAAOC,2BAAAA,CAAc;;;;;;;AAOhD,CAAC;AA0BD,MAAMC,uBAAuB,CAACC,SAAAA,GAAAA;AAC5B,IAAA,MAAMC,iBAAiBC,wCAAAA,CAA8BF,SAAAA,CAAAA;AAErD,IAAA,IAAIC,mBAAmB,IAAA,EAAM;QAC3B,OAAO;YACLE,SAAAA,EAAW,EAAA;YACXC,QAAAA,EAAU,IAAA;YACVC,KAAAA,EAAO,EAAA;YACPC,MAAAA,EAAQ;AACV,SAAA;AACF,IAAA;AAEA,IAAA,MAAM,EAAEF,QAAQ,EAAEG,QAAQ,EAAEF,KAAK,EAAE,GAAGJ,cAAAA;;IAGtC,OAAO;AACLE,QAAAA,SAAAA,EAAWI,SAASC,GAAG;QACvBJ,QAAAA,EAAUA,QAAAA,KAAa,OAAO,IAAA,GAAO,OAAA;QACrCC,KAAAA,EAAOA,KAAAA;QACPC,MAAAA,EAAQ;AACV,KAAA;AACF,CAAA;AAEA,MAAMG,qBAAqB,CAACJ,KAAAA,GAAAA;IAC1B,IAAIA,KAAAA,CAAMF,SAAS,KAAK,EAAA,EAAI;QAC1B,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,MAAMO,WAAAA,GAAcC,6BAAAA,EAAAA;AACpB,IAAA,MAAMC,SAAAA,GAAuB;AAC3BT,QAAAA,SAAAA,EAAWE,MAAMF,SAAS;AAC1BC,QAAAA,QAAAA,EAAUC,MAAMD,QAAQ;AACxBC,QAAAA,KAAAA,EAAOA,MAAMA;AACf,KAAA;IAEA,IAAI;AACFK,QAAAA,WAAAA,CAAYG,QAAQ,CAACD,SAAAA,CAAAA;;AAErB,QAAA,MAAMR,WACJ,KAACC,CAAMD,QAAQ,KAAK,IAAA,IAAQC,MAAMC,MAAM,KAAK,MAAA,IAC5CD,KAAAA,CAAMD,QAAQ,KAAK,OAAA,IAAWC,MAAMC,MAAM,KAAK,SAC5C,IAAA,GACA,IAAA;AACN,QAAA,MAAMQ,aAAAA,GAAwC;AAAC,YAAA;AAAEN,gBAAAA,GAAAA,EAAKH,MAAMF;AAAU,aAAA;AAAGE,YAAAA,KAAAA,CAAMA;AAAM,SAAA;QACrF,OAAO;YACLU,OAAAA,EAAS;AACP,gBAAA,CAACX,WAAWU;AACd;AACF,SAAA;AACF,IAAA,CAAA,CAAE,OAAOE,KAAAA,EAAO;QACd,OAAO,IAAA;AACT,IAAA;AACF,CAAA;MAEaC,aAAAA,GAAgB,CAAC,EAC5BC,IAAI,EACJb,KAAK,EACLc,QAAQ,EACRC,QAAQ,EACRC,aAAa,EACbC,eAAAA,GAAkB,EAAE,EACD,GAAA;IACnB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,UAAAA,EAAYC,aAAAA,CAAc,GAAGC,gBAAAA,CAAMC,QAAQ,CAAa7B,oBAAAA,CAAqBM,KAAAA,CAAAA,CAAAA;AACpF,IAAA,MAAM,CAACwB,iBAAAA,EAAmBC,oBAAAA,CAAqB,GAAGF,cAAAA,CAAS,KAAA,CAAA;IAC3D,MAAMG,YAAAA,GAAe7B,yCAA8BG,KAAAA,CAAAA,KAAW,IAAA;;AAG9D,IAAA,IAAI,CAAC2B,KAAAA,CAAMC,OAAO,CAACX,eAAAA,CAAAA,EAAkB;AACnCA,QAAAA,eAAAA,GAAkB,EAAE;AACtB,IAAA;IAEA,MAAMY,aAAAA,GAAgBZ,eAAAA,CAAgBa,IAAI,CAAC,CAACC,QAAUA,KAAAA,CAAMlB,IAAI,KAAKO,UAAAA,CAAWtB,SAAS,CAAA;IACzF,MAAMkC,WAAAA,GAAcH,eAAeI,IAAAA,KAAS,aAAA;;AAG5C,IAAA,MAAMC,kBAAkB,CAACC,YAAAA,GAAAA;QACvBd,aAAAA,CAAcc,YAAAA,CAAAA;AACd,QAAA,MAAM9B,WAAAA,GAAcC,6BAAAA,EAAAA;AACpB,QAAA,MAAMC,SAAAA,GAAuB;AAC3BT,YAAAA,SAAAA,EAAWqC,aAAarC,SAAS;AACjCC,YAAAA,QAAAA,EAAUoC,aAAapC,QAAQ;AAC/BC,YAAAA,KAAAA,EAAOmC,aAAanC;AACtB,SAAA;QACA,IAAI;AACFK,YAAAA,WAAAA,CAAYG,QAAQ,CAACD,SAAAA,CAAAA;AACrB,YAAA,MAAMR,WACJ,YAACoC,CAAapC,QAAQ,KAAK,IAAA,IAAQoC,aAAalC,MAAM,KAAK,MAAA,IAC1DkC,YAAAA,CAAapC,QAAQ,KAAK,OAAA,IAAWoC,aAAalC,MAAM,KAAK,SAC1D,IAAA,GACA,IAAA;AACN,YAAA,MAAMQ,aAAAA,GAAwC;AAC5C,gBAAA;AAAEN,oBAAAA,GAAAA,EAAKgC,aAAarC;AAAU,iBAAA;AAC9BqC,gBAAAA,YAAAA,CAAanC;AACd,aAAA;YACD,MAAML,SAAAA,GAAwCwC,YAAAA,CAAarC,SAAS,GAChE;gBACEY,OAAAA,EAAS;AACP,oBAAA,CAACX,WAAWU;AACd;aACF,GACA,IAAA;AACJ,YAAA,IAAId,SAAAA,EAAW;gBACbmB,QAAAA,CAAS;oBACPsB,MAAAA,EAAQ;AACNvB,wBAAAA,IAAAA;wBACAb,KAAAA,EAAOL;AACT;AACF,iBAAA,CAAA;AACF,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;;AAER,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAM0C,oBAAAA,GAAuB,IAAA;AAC3B,QAAA,MAAMC,YAAAA,GAA2B;YAC/BxC,SAAAA,EAAW,EAAA;YACXC,QAAAA,EAAU,IAAA;YACVC,KAAAA,EAAO,EAAA;YACPC,MAAAA,EAAQ;AACV,SAAA;QACAoB,aAAAA,CAAciB,YAAAA,CAAAA;QACdxB,QAAAA,CAAS;YACPsB,MAAAA,EAAQ;AACNvB,gBAAAA,IAAAA;AACAb,gBAAAA,KAAAA,EAAOI,kBAAAA,CAAmBkC,YAAAA;AAC5B;AACF,SAAA,CAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMC,YAAAA,GAAe,IAAA;QACnBlB,aAAAA,CAAc;YACZvB,SAAAA,EAAW,EAAA;YACXC,QAAAA,EAAU,IAAA;YACVC,KAAAA,EAAO,EAAA;YACPC,MAAAA,EAAQ;AACV,SAAA,CAAA;QACAa,QAAAA,CAAS;YACPsB,MAAAA,EAAQ;AACNvB,gBAAAA,IAAAA;gBACAb,KAAAA,EAAO;AACT;AACF,SAAA,CAAA;AACAe,QAAAA,QAAAA,EAAAA;QACAU,oBAAAA,CAAqB,KAAA,CAAA;AACvB,IAAA,CAAA;AAEA,IAAA,MAAMe,oBAAoB,CAACC,SAAAA,GAAAA;QACzB,MAAMC,QAAAA,GAAWD,WAAWE,QAAAA,EAAAA,IAAc,EAAA;QAC1C,MAAMZ,KAAAA,GAAQd,gBAAgBa,IAAI,CAAC,CAACc,CAAAA,GAAMA,CAAAA,CAAE/B,IAAI,KAAK6B,QAAAA,CAAAA;QACrD,MAAMG,cAAAA,GAAiBd,OAAOE,IAAAA,KAAS,aAAA;AACvC,QAAA,MAAME,YAAAA,GAA2B;AAC/B,YAAA,GAAGf,UAAU;YACbtB,SAAAA,EAAW4C,QAAAA;AACX1C,YAAAA,KAAAA,EAAO0C,QAAAA,GAAYG,cAAAA,GAAiB,EAAA,GAAK,KAAA,GAASzB,WAAWpB;AAC/D,SAAA;QACAkC,eAAAA,CAAgBC,YAAAA,CAAAA;AAClB,IAAA,CAAA;AAEA,IAAA,MAAMW,uBAAuB,CAAC/C,QAAAA,GAAAA;QAC5B,MAAM2C,QAAAA,GAAW3C,UAAU4C,QAAAA,EAAAA,IAAc,IAAA;AACzC,QAAA,MAAMR,YAAAA,GAA2B;AAC/B,YAAA,GAAGf,UAAU;YACbrB,QAAAA,EAAU2C;AACZ,SAAA;QACAR,eAAAA,CAAgBC,YAAAA,CAAAA;AAClB,IAAA,CAAA;AAEA,IAAA,MAAMY,oBAAoB,CAACL,QAAAA,GAAAA;AACzB,QAAA,MAAM1C,KAAAA,GAAQgC,WAAAA,GAAcU,QAAAA,EAAUC,QAAAA,EAAAA,GAAaD,UAAUC,QAAAA,EAAAA,KAAe,MAAA;AAC5E,QAAA,MAAMR,YAAAA,GAA2B;AAAE,YAAA,GAAGf,UAAU;AAAEpB,YAAAA;AAAM,SAAA;QACxDkC,eAAAA,CAAgBC,YAAAA,CAAAA;AAClB,IAAA,CAAA;AAEA,IAAA,MAAMa,qBAAqB,CAAC/C,MAAAA,GAAAA;QAC1B,MAAMyC,QAAAA,GAAWzC,QAAQ0C,QAAAA,EAAAA,IAAc,MAAA;AACvC,QAAA,MAAMR,YAAAA,GAA2B;AAC/B,YAAA,GAAGf,UAAU;YACbnB,MAAAA,EAAQyC;AACV,SAAA;QACAR,eAAAA,CAAgBC,YAAAA,CAAAA;AAClB,IAAA,CAAA;AAEA,IAAA,IAAI,CAACT,YAAAA,EAAc;AACjB,QAAA,qBACEuB,cAAA,CAACC,gBAAAA,EAAAA;YAAIC,OAAAA,EAAS,CAAA;YAAGC,MAAAA,EAAQ,CAAA;YAAGC,SAAS,EAAA,IAAA;YAACC,UAAAA,EAAW,UAAA;YAAWC,WAAAA,EAAY,YAAA;AACtE,YAAA,QAAA,gBAAAN,cAAA,CAACO,yCAAAA,EAAAA;gBAAqBC,OAAAA,EAASpB;;;AAGrC,IAAA;AAEA,IAAA,qBACEY,cAAA,CAACC,gBAAAA,EAAAA;QAAIQ,SAAAA,EAAW,CAAA;AACd,QAAA,QAAA,gBAAAC,eAAA,CAACT,gBAAAA,EAAAA;YACCI,UAAAA,EAAW,UAAA;YACXD,SAAS,EAAA,IAAA;YACTE,WAAAA,EAAY,YAAA;YACZK,WAAAA,EAAa,GAAA;YACbC,WAAAA,EAAY,OAAA;;8BAEZF,eAAA,CAACG,iBAAAA,EAAAA;oBAAKC,cAAAA,EAAe,eAAA;oBAAgBC,UAAAA,EAAW,QAAA;oBAASb,OAAAA,EAAS,CAAA;;sCAChEF,cAAA,CAACgB,uBAAAA,EAAAA;4BAAWC,OAAAA,EAAQ,OAAA;4BAAQC,SAAAA,EAAU,YAAA;sCACnCjD,aAAAA,CACC;AACEkD,gCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,gCAAA,CAAA;gCACZC,cAAAA,EAAgB;6BAClB,EACA;AACEzD,gCAAAA,IAAAA,gBAAMoC,cAAA,CAACsB,QAAAA,EAAAA;AAAQvD,oCAAAA,QAAAA,EAAAA;;AACjB,6BAAA;;AAGJ,sCAAA2C,eAAA,CAACa,oBAAOC,IAAI,EAAA;4BAACC,IAAAA,EAAMlD,iBAAAA;4BAAmBmD,YAAAA,EAAclD,oBAAAA;;AAClD,8CAAAwB,cAAA,CAACuB,oBAAOI,OAAO,EAAA;AACb,oCAAA,QAAA,gBAAA3B,cAAA,CAAC4B,uBAAAA,EAAAA;wCAAWC,KAAAA,EAAM,QAAA;AAChB,wCAAA,QAAA,gBAAA7B,cAAA,CAAC8B,WAAAA,EAAAA,EAAAA;;;8CAGL9B,cAAA,CAAC+B,yBAAAA,EAAAA;oCAAcC,SAAAA,EAAW1C,YAAAA;8CACvBrB,aAAAA,CAAc;AACbkD,wCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,2CAAA,CAAA;wCACZC,cAAAA,EAAgB;AAClB,qCAAA;;;;;;8BAKNX,eAAA,CAACT,gBAAAA,EAAAA;oBAAII,UAAAA,EAAW,YAAA;oBAAaH,OAAAA,EAAS,CAAA;;sCACpCF,cAAA,CAACC,gBAAAA,EAAAA;4BAAIgC,aAAAA,EAAe,CAAA;AAClB,4BAAA,QAAA,gBAAAjC,cAAA,CAACgB,uBAAAA,EAAAA;gCACCC,OAAAA,EAAQ,OAAA;gCACRC,SAAAA,EAAU,YAAA;gCACVgB,KAAAA,EAAO;oCAAEC,aAAAA,EAAe,WAAA;oCAAaC,aAAAA,EAAe;AAAE,iCAAA;0CAErDnE,aAAAA,CAAc;AAAEkD,oCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,6BAAA,CAAA;oCAAgCC,cAAAA,EAAgB;AAAK,iCAAA;;;sCAGtFX,eAAA,CAACG,iBAAAA,EAAAA;4BAAKwB,GAAAA,EAAK,CAAA;;8CACTrC,cAAA,CAACC,gBAAAA,EAAAA;oCAAIqC,QAAAA,EAAU,CAAA;oCAAGC,IAAAA,EAAM,CAAA;4DACtBvC,cAAA,CAACwC,mBAAMhB,IAAI,EAAA;wCAAC5D,IAAAA,EAAM,CAAA,EAAGA,IAAAA,CAAK,MAAM,CAAC;AAC/B,wCAAA,QAAA,gBAAAoC,cAAA,CAACyC,yBAAAA,EAAAA;AACC1F,4CAAAA,KAAAA,EAAOoB,WAAWtB,SAAS;4CAC3BgB,QAAAA,EAAU0B,iBAAAA;AACVmD,4CAAAA,WAAAA,EAAazE,aAAAA,CAAc;AACzBkD,gDAAAA,EAAAA,EAAIC,eAAAA,CAAQ,gCAAA,CAAA;gDACZC,cAAAA,EAAgB;AAClB,6CAAA,CAAA;AAECrD,4CAAAA,QAAAA,EAAAA,eAAAA,CAAgB2E,GAAG,CAAC,CAAC7D,KAAAA,iBACpBkB,cAAA,CAAC4C,+BAAAA,EAAAA;AAAoC7F,oDAAAA,KAAAA,EAAO+B,MAAMlB,IAAI;AACpD,oDAAA,QAAA,gBAAA8C,eAAA,CAACG,iBAAAA,EAAAA;wDAAKwB,GAAAA,EAAK,CAAA;wDAAGtB,UAAAA,EAAW,QAAA;;0EACvBf,cAAA,CAAC1D,kBAAAA,EAAAA;AAAmB0C,gEAAAA,IAAAA,EAAMF,MAAME;;0EAChCgB,cAAA,CAAC6C,MAAAA,EAAAA;AAAM/D,gEAAAA,QAAAA,EAAAA,KAAAA,CAAMlB;;;;AAHQkB,iDAAAA,EAAAA,KAAAA,CAAMlB,IAAI,CAAA;;;;8CAU3CoC,cAAA,CAACC,gBAAAA,EAAAA;oCAAIqC,QAAAA,EAAU,CAAA;oCAAGC,IAAAA,EAAM,CAAA;4DACtBvC,cAAA,CAACwC,mBAAMhB,IAAI,EAAA;wCAAC5D,IAAAA,EAAM,CAAA,EAAGA,IAAAA,CAAK,SAAS,CAAC;AAClC,wCAAA,QAAA,gBAAA8C,eAAA,CAAC+B,yBAAAA,EAAAA;AACC1F,4CAAAA,KAAAA,EAAOoB,WAAWrB,QAAQ;4CAC1Be,QAAAA,EAAUgC,oBAAAA;4CACViD,QAAAA,EAAU,CAAC3E,WAAWtB,SAAS;AAC/B6F,4CAAAA,WAAAA,EAAazE,aAAAA,CAAc;AACzBkD,gDAAAA,EAAAA,EAAIC,eAAAA,CAAQ,mCAAA,CAAA;gDACZC,cAAAA,EAAgB;AAClB,6CAAA,CAAA;;8DAEArB,cAAA,CAAC4C,+BAAAA,EAAAA;oDAAmB7F,KAAAA,EAAM,IAAA;8DACvBkB,aAAAA,CAAc;AACbkD,wDAAAA,EAAAA,EAAIC,eAAAA,CAAQ,sCAAA,CAAA;wDACZC,cAAAA,EAAgB;AAClB,qDAAA;;8DAEFrB,cAAA,CAAC4C,+BAAAA,EAAAA;oDAAmB7F,KAAAA,EAAM,OAAA;8DACvBkB,aAAAA,CAAc;AACbkD,wDAAAA,EAAAA,EAAIC,eAAAA,CAAQ,yCAAA,CAAA;wDACZC,cAAAA,EAAgB;AAClB,qDAAA;;;;;;8CAMRrB,cAAA,CAACC,gBAAAA,EAAAA;oCAAIqC,QAAAA,EAAU,CAAA;oCAAGC,IAAAA,EAAM,CAAA;4DACtBvC,cAAA,CAACwC,mBAAMhB,IAAI,EAAA;wCAAC5D,IAAAA,EAAM,CAAA,EAAGA,IAAAA,CAAK,MAAM,CAAC;AAC/B,wCAAA,QAAA,gBAAAoC,cAAA,CAACyC,yBAAAA,EAAAA;4CACC1F,KAAAA,EAAOoB,UAAAA,CAAWpB,KAAK,EAAE2C,QAAAA,EAAAA,IAAc,EAAA;4CACvC7B,QAAAA,EAAUiC,iBAAAA;4CACVgD,QAAAA,EAAU,CAAC3E,WAAWtB,SAAS;AAC/B6F,4CAAAA,WAAAA,EAAazE,aAAAA,CAAc;AACzBkD,gDAAAA,EAAAA,EAAIC,eAAAA,CAAQ,gCAAA,CAAA;gDACZC,cAAAA,EAAgB;AAClB,6CAAA,CAAA;sDAECtC,WAAAA,IAAeH,aAAAA,EAAemE,OAC7BnE,aAAAA,CAAcmE,IAAI,CAACJ,GAAG,CAAC,CAACK,SAAAA,iBACtBhD,cAAA,CAAC4C,+BAAAA,EAAAA;oDAAmC7F,KAAAA,EAAOiG,SAAAA;AACxCA,oDAAAA,QAAAA,EAAAA;mDADsBA,SAAAA,CAAAA,CAAAA,iBAK3BtC,eAAA,CAAAuC,mBAAA,EAAA;;kEACEjD,cAAA,CAAC4C,+BAAAA,EAAAA;wDAAmB7F,KAAAA,EAAM,MAAA;kEACvBkB,aAAAA,CAAc;AACbkD,4DAAAA,EAAAA,EAAIC,eAAAA,CAAQ,qCAAA,CAAA;4DACZC,cAAAA,EAAgB;AAClB,yDAAA;;kEAEFrB,cAAA,CAAC4C,+BAAAA,EAAAA;wDAAmB7F,KAAAA,EAAM,OAAA;kEACvBkB,aAAAA,CAAc;AACbkD,4DAAAA,EAAAA,EAAIC,eAAAA,CAAQ,sCAAA,CAAA;4DACZC,cAAAA,EAAgB;AAClB,yDAAA;;;;;;;;;;;8BAUhBX,eAAA,CAACT,gBAAAA,EAAAA;oBAAII,UAAAA,EAAW,YAAA;oBAAaH,OAAAA,EAAS,CAAA;;sCACpCF,cAAA,CAACC,gBAAAA,EAAAA;4BAAIgC,aAAAA,EAAe,CAAA;AAClB,4BAAA,QAAA,gBAAAjC,cAAA,CAACgB,uBAAAA,EAAAA;gCACCC,OAAAA,EAAQ,OAAA;gCACRC,SAAAA,EAAU,YAAA;gCACVgB,KAAAA,EAAO;oCAAEC,aAAAA,EAAe,WAAA;oCAAaC,aAAAA,EAAe;AAAE,iCAAA;0CAErDnE,aAAAA,CAAc;AACbkD,oCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,+BAAA,CAAA;oCACZC,cAAAA,EAAgB;AAClB,iCAAA;;;sCAGJrB,cAAA,CAACC,gBAAAA,EAAAA;4BAAIgC,aAAAA,EAAe,CAAA;oDAClBjC,cAAA,CAACwC,mBAAMhB,IAAI,EAAA;gCAAC5D,IAAAA,EAAM,CAAA,EAAGA,IAAAA,CAAK,OAAO,CAAC;AAChC,gCAAA,QAAA,gBAAA8C,eAAA,CAAC+B,yBAAAA,EAAAA;AACC1F,oCAAAA,KAAAA,EAAOoB,WAAWnB,MAAM;oCACxBa,QAAAA,EAAUkC,kBAAAA;AACV2C,oCAAAA,WAAAA,EAAazE,aAAAA,CAAc;AACzBkD,wCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,iCAAA,CAAA;wCACZC,cAAAA,EAAgB;AAClB,qCAAA,CAAA;;sDAEAX,eAAA,CAACkC,+BAAAA,EAAAA;4CAAmB7F,KAAAA,EAAM,MAAA;;AAAO,gDAAA,OAAA;8DAC1BiD,cAAA,CAAC6C,MAAAA,EAAAA;oDAAKX,KAAAA,EAAO;wDAAEgB,UAAAA,EAAY;AAAO,qDAAA;8DAAInF,aAAAA,IAAiBH;;;;sDAE9D8C,eAAA,CAACkC,+BAAAA,EAAAA;4CAAmB7F,KAAAA,EAAM,MAAA;;AAAO,gDAAA,OAAA;8DAC1BiD,cAAA,CAAC6C,MAAAA,EAAAA;oDAAKX,KAAAA,EAAO;wDAAEgB,UAAAA,EAAY;AAAO,qDAAA;8DAAInF,aAAAA,IAAiBH;;;;;;;;;;;;;AAS9E;;;;"}
1
+ {"version":3,"file":"ConditionForm.js","sources":["../../../../../admin/src/components/FormModal/attributes/ConditionForm.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useState } from 'react';\n\nimport { createRulesEngine, ConfirmDialog, type Condition } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n Field,\n SingleSelect,\n SingleSelectOption,\n Dialog,\n} from '@strapi/design-system';\nimport { Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AttributeIcon } from '../../../components/AttributeIcon';\nimport { getFirstVisibleConditionEntry } from '../../../utils/conditions';\nimport { getTrad } from '../../../utils/getTrad';\nimport { ApplyConditionButton } from '../../ApplyConditionButton';\n\nimport type {\n AttributeConditions,\n AttributeConditionRule,\n AttributeConditionValue,\n} from '../../../types';\n\nconst SmallAttributeIcon = styled(AttributeIcon)`\n width: 16px !important;\n height: 16px !important;\n svg {\n width: 16px !important;\n height: 16px !important;\n }\n`;\n\ninterface ConditionFormProps {\n name: string;\n value?: AttributeConditions | null;\n onChange: (e: { target: { name: string; value?: AttributeConditions | null } }) => void;\n onDelete: () => void;\n attributeName?: string;\n conditionFields?: Array<{\n name: string;\n type: string;\n enum?: string[];\n }>;\n allAttributes?: Array<{\n name: string;\n type: string;\n }>;\n}\n\ninterface LocalValue {\n dependsOn: string;\n operator: 'is' | 'isNot';\n value: AttributeConditionValue;\n action: 'show' | 'hide';\n}\n\nconst convertFromJsonLogic = (jsonLogic?: AttributeConditions | null): LocalValue => {\n const conditionEntry = getFirstVisibleConditionEntry(jsonLogic);\n\n if (conditionEntry === null) {\n return {\n dependsOn: '',\n operator: 'is',\n value: '',\n action: 'show',\n };\n }\n\n const { operator, fieldVar, value } = conditionEntry;\n\n // Assume 'visible' implies 'show' for now; adjust if backend uses 'hidden' key\n return {\n dependsOn: fieldVar.var,\n operator: operator === '==' ? 'is' : 'isNot',\n value: value,\n action: 'show', // Default to 'show' for 'visible'; adjust based on backend logic\n };\n};\n\nconst convertToJsonLogic = (value: LocalValue): AttributeConditions | null => {\n if (value.dependsOn === '') {\n return null;\n }\n\n const rulesEngine = createRulesEngine();\n const condition: Condition = {\n dependsOn: value.dependsOn,\n operator: value.operator,\n value: value.value,\n };\n\n try {\n rulesEngine.validate(condition);\n // Determine JSON Logic operator based on operator and action\n const operator =\n (value.operator === 'is' && value.action === 'show') ||\n (value.operator === 'isNot' && value.action === 'hide')\n ? '=='\n : '!=';\n const conditionRule: AttributeConditionRule = [{ var: value.dependsOn }, value.value];\n return {\n visible: {\n [operator]: conditionRule,\n },\n };\n } catch {\n return null;\n }\n};\n\nexport const ConditionForm = ({\n name,\n value,\n onChange,\n onDelete,\n attributeName,\n conditionFields = [],\n}: ConditionFormProps) => {\n const { formatMessage } = useIntl();\n const [localValue, setLocalValue] = React.useState<LocalValue>(convertFromJsonLogic(value));\n const [showConfirmDialog, setShowConfirmDialog] = useState(false);\n const hasCondition = getFirstVisibleConditionEntry(value) !== null;\n\n // Add safety check for conditionFields\n if (!Array.isArray(conditionFields)) {\n conditionFields = [];\n }\n\n const selectedField = conditionFields.find((field) => field.name === localValue.dependsOn);\n const isEnumField = selectedField?.type === 'enumeration';\n\n // Helper to update localValue and propagate JSON Logic\n const updateCondition = (updatedValue: LocalValue) => {\n setLocalValue(updatedValue);\n const rulesEngine = createRulesEngine();\n const condition: Condition = {\n dependsOn: updatedValue.dependsOn,\n operator: updatedValue.operator,\n value: updatedValue.value,\n };\n try {\n rulesEngine.validate(condition);\n const operator =\n (updatedValue.operator === 'is' && updatedValue.action === 'show') ||\n (updatedValue.operator === 'isNot' && updatedValue.action === 'hide')\n ? '=='\n : '!=';\n const conditionRule: AttributeConditionRule = [\n { var: updatedValue.dependsOn },\n updatedValue.value,\n ];\n const jsonLogic: AttributeConditions | null = updatedValue.dependsOn\n ? {\n visible: {\n [operator]: conditionRule,\n },\n }\n : null;\n if (jsonLogic) {\n onChange({\n target: {\n name,\n value: jsonLogic,\n },\n });\n }\n } catch {\n // Optionally, show an error to the user\n }\n };\n\n const handleApplyCondition = () => {\n const initialValue: LocalValue = {\n dependsOn: '',\n operator: 'is',\n value: '',\n action: 'show',\n };\n setLocalValue(initialValue);\n onChange({\n target: {\n name,\n value: convertToJsonLogic(initialValue),\n },\n });\n };\n\n const handleDelete = () => {\n setLocalValue({\n dependsOn: '',\n operator: 'is',\n value: '',\n action: 'show',\n });\n onChange({\n target: {\n name,\n value: null,\n },\n });\n onDelete();\n setShowConfirmDialog(false);\n };\n\n const handleFieldChange = (fieldName: string | number) => {\n const newValue = fieldName?.toString() || '';\n const field = conditionFields.find((f) => f.name === newValue);\n const isNewFieldEnum = field?.type === 'enumeration';\n const updatedValue: LocalValue = {\n ...localValue,\n dependsOn: newValue,\n value: newValue ? (isNewFieldEnum ? '' : false) : localValue.value,\n };\n updateCondition(updatedValue);\n };\n\n const handleOperatorChange = (operator: string | number) => {\n const newValue = operator?.toString() || 'is';\n const updatedValue: LocalValue = {\n ...localValue,\n operator: newValue as 'is' | 'isNot',\n };\n updateCondition(updatedValue);\n };\n\n const handleValueChange = (newValue: string | number) => {\n const value = isEnumField ? newValue?.toString() : newValue?.toString() === 'true';\n const updatedValue: LocalValue = { ...localValue, value };\n updateCondition(updatedValue);\n };\n\n const handleActionChange = (action: string | number) => {\n const newValue = action?.toString() || 'show';\n const updatedValue: LocalValue = {\n ...localValue,\n action: newValue as 'show' | 'hide',\n };\n updateCondition(updatedValue);\n };\n\n if (!hasCondition) {\n return (\n <Box padding={4} margin={4} hasRadius background=\"neutral0\" borderColor=\"neutral200\">\n <ApplyConditionButton onClick={handleApplyCondition} />\n </Box>\n );\n }\n\n return (\n <Box marginTop={2}>\n <Box\n background=\"neutral0\"\n hasRadius\n borderColor=\"neutral200\"\n borderWidth={0.5}\n borderStyle=\"solid\"\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\" padding={4}>\n <Typography variant=\"sigma\" textColor=\"neutral800\">\n {formatMessage(\n {\n id: getTrad('form.attribute.condition.title'),\n defaultMessage: 'Condition for {name}',\n },\n {\n name: <strong>{attributeName}</strong>,\n }\n )}\n </Typography>\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <IconButton label=\"Delete\">\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleDelete}>\n {formatMessage({\n id: getTrad('popUpWarning.bodyMessage.delete-condition'),\n defaultMessage: 'Are you sure you want to delete this condition?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </Flex>\n\n <Box background=\"neutral100\" padding={4}>\n <Box paddingBottom={2}>\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n style={{ textTransform: 'uppercase', letterSpacing: 1 }}\n >\n {formatMessage({ id: getTrad('form.attribute.condition.if'), defaultMessage: 'IF' })}\n </Typography>\n </Box>\n <Flex gap={4}>\n <Box minWidth={0} flex={1}>\n <Field.Root name={`${name}.field`}>\n <SingleSelect\n value={localValue.dependsOn}\n onChange={handleFieldChange}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.field'),\n defaultMessage: 'field',\n })}\n >\n {conditionFields.map((field) => (\n <SingleSelectOption key={field.name} value={field.name}>\n <Flex gap={2} alignItems=\"center\">\n <SmallAttributeIcon type={field.type} />\n <span>{field.name}</span>\n </Flex>\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Box>\n <Box minWidth={0} flex={1}>\n <Field.Root name={`${name}.operator`}>\n <SingleSelect\n value={localValue.operator}\n onChange={handleOperatorChange}\n disabled={!localValue.dependsOn}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.operator'),\n defaultMessage: 'condition',\n })}\n >\n <SingleSelectOption value=\"is\">\n {formatMessage({\n id: getTrad('form.attribute.condition.operator.is'),\n defaultMessage: 'is',\n })}\n </SingleSelectOption>\n <SingleSelectOption value=\"isNot\">\n {formatMessage({\n id: getTrad('form.attribute.condition.operator.isNot'),\n defaultMessage: 'is not',\n })}\n </SingleSelectOption>\n </SingleSelect>\n </Field.Root>\n </Box>\n\n <Box minWidth={0} flex={1}>\n <Field.Root name={`${name}.value`}>\n <SingleSelect\n value={localValue.value?.toString() || ''}\n onChange={handleValueChange}\n disabled={!localValue.dependsOn}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.value'),\n defaultMessage: 'value',\n })}\n >\n {isEnumField && selectedField?.enum ? (\n selectedField.enum.map((enumValue) => (\n <SingleSelectOption key={enumValue} value={enumValue}>\n {enumValue}\n </SingleSelectOption>\n ))\n ) : (\n <>\n <SingleSelectOption value=\"true\">\n {formatMessage({\n id: getTrad('form.attribute.condition.value.true'),\n defaultMessage: 'true',\n })}\n </SingleSelectOption>\n <SingleSelectOption value=\"false\">\n {formatMessage({\n id: getTrad('form.attribute.condition.value.false'),\n defaultMessage: 'false',\n })}\n </SingleSelectOption>\n </>\n )}\n </SingleSelect>\n </Field.Root>\n </Box>\n </Flex>\n </Box>\n\n <Box background=\"neutral100\" padding={4}>\n <Box paddingBottom={4}>\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n style={{ textTransform: 'uppercase', letterSpacing: 1 }}\n >\n {formatMessage({\n id: getTrad('form.attribute.condition.then'),\n defaultMessage: 'THEN',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={4}>\n <Field.Root name={`${name}.action`}>\n <SingleSelect\n value={localValue.action}\n onChange={handleActionChange}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.action'),\n defaultMessage: 'action',\n })}\n >\n <SingleSelectOption value=\"show\">\n Show <span style={{ fontWeight: 'bold' }}>{attributeName || name}</span>\n </SingleSelectOption>\n <SingleSelectOption value=\"hide\">\n Hide <span style={{ fontWeight: 'bold' }}>{attributeName || name}</span>\n </SingleSelectOption>\n </SingleSelect>\n </Field.Root>\n </Box>\n </Box>\n </Box>\n </Box>\n );\n};\n"],"names":["SmallAttributeIcon","styled","AttributeIcon","convertFromJsonLogic","jsonLogic","conditionEntry","getFirstVisibleConditionEntry","dependsOn","operator","value","action","fieldVar","var","convertToJsonLogic","rulesEngine","createRulesEngine","condition","validate","conditionRule","visible","ConditionForm","name","onChange","onDelete","attributeName","conditionFields","formatMessage","useIntl","localValue","setLocalValue","React","useState","showConfirmDialog","setShowConfirmDialog","hasCondition","Array","isArray","selectedField","find","field","isEnumField","type","updateCondition","updatedValue","target","handleApplyCondition","initialValue","handleDelete","handleFieldChange","fieldName","newValue","toString","f","isNewFieldEnum","handleOperatorChange","handleValueChange","handleActionChange","_jsx","Box","padding","margin","hasRadius","background","borderColor","ApplyConditionButton","onClick","marginTop","_jsxs","borderWidth","borderStyle","Flex","justifyContent","alignItems","Typography","variant","textColor","id","getTrad","defaultMessage","strong","Dialog","Root","open","onOpenChange","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","paddingBottom","style","textTransform","letterSpacing","gap","minWidth","flex","Field","SingleSelect","placeholder","map","SingleSelectOption","span","disabled","enum","enumValue","_Fragment","fontWeight"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,MAAMA,kBAAAA,GAAqBC,uBAAAA,CAAOC,2BAAAA,CAAc;;;;;;;AAOhD,CAAC;AA0BD,MAAMC,uBAAuB,CAACC,SAAAA,GAAAA;AAC5B,IAAA,MAAMC,iBAAiBC,wCAAAA,CAA8BF,SAAAA,CAAAA;AAErD,IAAA,IAAIC,mBAAmB,IAAA,EAAM;QAC3B,OAAO;YACLE,SAAAA,EAAW,EAAA;YACXC,QAAAA,EAAU,IAAA;YACVC,KAAAA,EAAO,EAAA;YACPC,MAAAA,EAAQ;AACV,SAAA;AACF,IAAA;AAEA,IAAA,MAAM,EAAEF,QAAQ,EAAEG,QAAQ,EAAEF,KAAK,EAAE,GAAGJ,cAAAA;;IAGtC,OAAO;AACLE,QAAAA,SAAAA,EAAWI,SAASC,GAAG;QACvBJ,QAAAA,EAAUA,QAAAA,KAAa,OAAO,IAAA,GAAO,OAAA;QACrCC,KAAAA,EAAOA,KAAAA;QACPC,MAAAA,EAAQ;AACV,KAAA;AACF,CAAA;AAEA,MAAMG,qBAAqB,CAACJ,KAAAA,GAAAA;IAC1B,IAAIA,KAAAA,CAAMF,SAAS,KAAK,EAAA,EAAI;QAC1B,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,MAAMO,WAAAA,GAAcC,6BAAAA,EAAAA;AACpB,IAAA,MAAMC,SAAAA,GAAuB;AAC3BT,QAAAA,SAAAA,EAAWE,MAAMF,SAAS;AAC1BC,QAAAA,QAAAA,EAAUC,MAAMD,QAAQ;AACxBC,QAAAA,KAAAA,EAAOA,MAAMA;AACf,KAAA;IAEA,IAAI;AACFK,QAAAA,WAAAA,CAAYG,QAAQ,CAACD,SAAAA,CAAAA;;AAErB,QAAA,MAAMR,WACJ,KAACC,CAAMD,QAAQ,KAAK,IAAA,IAAQC,MAAMC,MAAM,KAAK,MAAA,IAC5CD,KAAAA,CAAMD,QAAQ,KAAK,OAAA,IAAWC,MAAMC,MAAM,KAAK,SAC5C,IAAA,GACA,IAAA;AACN,QAAA,MAAMQ,aAAAA,GAAwC;AAAC,YAAA;AAAEN,gBAAAA,GAAAA,EAAKH,MAAMF;AAAU,aAAA;AAAGE,YAAAA,KAAAA,CAAMA;AAAM,SAAA;QACrF,OAAO;YACLU,OAAAA,EAAS;AACP,gBAAA,CAACX,WAAWU;AACd;AACF,SAAA;AACF,IAAA,CAAA,CAAE,OAAM;QACN,OAAO,IAAA;AACT,IAAA;AACF,CAAA;MAEaE,aAAAA,GAAgB,CAAC,EAC5BC,IAAI,EACJZ,KAAK,EACLa,QAAQ,EACRC,QAAQ,EACRC,aAAa,EACbC,eAAAA,GAAkB,EAAE,EACD,GAAA;IACnB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,UAAAA,EAAYC,aAAAA,CAAc,GAAGC,gBAAAA,CAAMC,QAAQ,CAAa5B,oBAAAA,CAAqBM,KAAAA,CAAAA,CAAAA;AACpF,IAAA,MAAM,CAACuB,iBAAAA,EAAmBC,oBAAAA,CAAqB,GAAGF,cAAAA,CAAS,KAAA,CAAA;IAC3D,MAAMG,YAAAA,GAAe5B,yCAA8BG,KAAAA,CAAAA,KAAW,IAAA;;AAG9D,IAAA,IAAI,CAAC0B,KAAAA,CAAMC,OAAO,CAACX,eAAAA,CAAAA,EAAkB;AACnCA,QAAAA,eAAAA,GAAkB,EAAE;AACtB,IAAA;IAEA,MAAMY,aAAAA,GAAgBZ,eAAAA,CAAgBa,IAAI,CAAC,CAACC,QAAUA,KAAAA,CAAMlB,IAAI,KAAKO,UAAAA,CAAWrB,SAAS,CAAA;IACzF,MAAMiC,WAAAA,GAAcH,eAAeI,IAAAA,KAAS,aAAA;;AAG5C,IAAA,MAAMC,kBAAkB,CAACC,YAAAA,GAAAA;QACvBd,aAAAA,CAAcc,YAAAA,CAAAA;AACd,QAAA,MAAM7B,WAAAA,GAAcC,6BAAAA,EAAAA;AACpB,QAAA,MAAMC,SAAAA,GAAuB;AAC3BT,YAAAA,SAAAA,EAAWoC,aAAapC,SAAS;AACjCC,YAAAA,QAAAA,EAAUmC,aAAanC,QAAQ;AAC/BC,YAAAA,KAAAA,EAAOkC,aAAalC;AACtB,SAAA;QACA,IAAI;AACFK,YAAAA,WAAAA,CAAYG,QAAQ,CAACD,SAAAA,CAAAA;AACrB,YAAA,MAAMR,WACJ,YAACmC,CAAanC,QAAQ,KAAK,IAAA,IAAQmC,aAAajC,MAAM,KAAK,MAAA,IAC1DiC,YAAAA,CAAanC,QAAQ,KAAK,OAAA,IAAWmC,aAAajC,MAAM,KAAK,SAC1D,IAAA,GACA,IAAA;AACN,YAAA,MAAMQ,aAAAA,GAAwC;AAC5C,gBAAA;AAAEN,oBAAAA,GAAAA,EAAK+B,aAAapC;AAAU,iBAAA;AAC9BoC,gBAAAA,YAAAA,CAAalC;AACd,aAAA;YACD,MAAML,SAAAA,GAAwCuC,YAAAA,CAAapC,SAAS,GAChE;gBACEY,OAAAA,EAAS;AACP,oBAAA,CAACX,WAAWU;AACd;aACF,GACA,IAAA;AACJ,YAAA,IAAId,SAAAA,EAAW;gBACbkB,QAAAA,CAAS;oBACPsB,MAAAA,EAAQ;AACNvB,wBAAAA,IAAAA;wBACAZ,KAAAA,EAAOL;AACT;AACF,iBAAA,CAAA;AACF,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;;AAER,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMyC,oBAAAA,GAAuB,IAAA;AAC3B,QAAA,MAAMC,YAAAA,GAA2B;YAC/BvC,SAAAA,EAAW,EAAA;YACXC,QAAAA,EAAU,IAAA;YACVC,KAAAA,EAAO,EAAA;YACPC,MAAAA,EAAQ;AACV,SAAA;QACAmB,aAAAA,CAAciB,YAAAA,CAAAA;QACdxB,QAAAA,CAAS;YACPsB,MAAAA,EAAQ;AACNvB,gBAAAA,IAAAA;AACAZ,gBAAAA,KAAAA,EAAOI,kBAAAA,CAAmBiC,YAAAA;AAC5B;AACF,SAAA,CAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMC,YAAAA,GAAe,IAAA;QACnBlB,aAAAA,CAAc;YACZtB,SAAAA,EAAW,EAAA;YACXC,QAAAA,EAAU,IAAA;YACVC,KAAAA,EAAO,EAAA;YACPC,MAAAA,EAAQ;AACV,SAAA,CAAA;QACAY,QAAAA,CAAS;YACPsB,MAAAA,EAAQ;AACNvB,gBAAAA,IAAAA;gBACAZ,KAAAA,EAAO;AACT;AACF,SAAA,CAAA;AACAc,QAAAA,QAAAA,EAAAA;QACAU,oBAAAA,CAAqB,KAAA,CAAA;AACvB,IAAA,CAAA;AAEA,IAAA,MAAMe,oBAAoB,CAACC,SAAAA,GAAAA;QACzB,MAAMC,QAAAA,GAAWD,WAAWE,QAAAA,EAAAA,IAAc,EAAA;QAC1C,MAAMZ,KAAAA,GAAQd,gBAAgBa,IAAI,CAAC,CAACc,CAAAA,GAAMA,CAAAA,CAAE/B,IAAI,KAAK6B,QAAAA,CAAAA;QACrD,MAAMG,cAAAA,GAAiBd,OAAOE,IAAAA,KAAS,aAAA;AACvC,QAAA,MAAME,YAAAA,GAA2B;AAC/B,YAAA,GAAGf,UAAU;YACbrB,SAAAA,EAAW2C,QAAAA;AACXzC,YAAAA,KAAAA,EAAOyC,QAAAA,GAAYG,cAAAA,GAAiB,EAAA,GAAK,KAAA,GAASzB,WAAWnB;AAC/D,SAAA;QACAiC,eAAAA,CAAgBC,YAAAA,CAAAA;AAClB,IAAA,CAAA;AAEA,IAAA,MAAMW,uBAAuB,CAAC9C,QAAAA,GAAAA;QAC5B,MAAM0C,QAAAA,GAAW1C,UAAU2C,QAAAA,EAAAA,IAAc,IAAA;AACzC,QAAA,MAAMR,YAAAA,GAA2B;AAC/B,YAAA,GAAGf,UAAU;YACbpB,QAAAA,EAAU0C;AACZ,SAAA;QACAR,eAAAA,CAAgBC,YAAAA,CAAAA;AAClB,IAAA,CAAA;AAEA,IAAA,MAAMY,oBAAoB,CAACL,QAAAA,GAAAA;AACzB,QAAA,MAAMzC,KAAAA,GAAQ+B,WAAAA,GAAcU,QAAAA,EAAUC,QAAAA,EAAAA,GAAaD,UAAUC,QAAAA,EAAAA,KAAe,MAAA;AAC5E,QAAA,MAAMR,YAAAA,GAA2B;AAAE,YAAA,GAAGf,UAAU;AAAEnB,YAAAA;AAAM,SAAA;QACxDiC,eAAAA,CAAgBC,YAAAA,CAAAA;AAClB,IAAA,CAAA;AAEA,IAAA,MAAMa,qBAAqB,CAAC9C,MAAAA,GAAAA;QAC1B,MAAMwC,QAAAA,GAAWxC,QAAQyC,QAAAA,EAAAA,IAAc,MAAA;AACvC,QAAA,MAAMR,YAAAA,GAA2B;AAC/B,YAAA,GAAGf,UAAU;YACblB,MAAAA,EAAQwC;AACV,SAAA;QACAR,eAAAA,CAAgBC,YAAAA,CAAAA;AAClB,IAAA,CAAA;AAEA,IAAA,IAAI,CAACT,YAAAA,EAAc;AACjB,QAAA,qBACEuB,cAAA,CAACC,gBAAAA,EAAAA;YAAIC,OAAAA,EAAS,CAAA;YAAGC,MAAAA,EAAQ,CAAA;YAAGC,SAAS,EAAA,IAAA;YAACC,UAAAA,EAAW,UAAA;YAAWC,WAAAA,EAAY,YAAA;AACtE,YAAA,QAAA,gBAAAN,cAAA,CAACO,yCAAAA,EAAAA;gBAAqBC,OAAAA,EAASpB;;;AAGrC,IAAA;AAEA,IAAA,qBACEY,cAAA,CAACC,gBAAAA,EAAAA;QAAIQ,SAAAA,EAAW,CAAA;AACd,QAAA,QAAA,gBAAAC,eAAA,CAACT,gBAAAA,EAAAA;YACCI,UAAAA,EAAW,UAAA;YACXD,SAAS,EAAA,IAAA;YACTE,WAAAA,EAAY,YAAA;YACZK,WAAAA,EAAa,GAAA;YACbC,WAAAA,EAAY,OAAA;;8BAEZF,eAAA,CAACG,iBAAAA,EAAAA;oBAAKC,cAAAA,EAAe,eAAA;oBAAgBC,UAAAA,EAAW,QAAA;oBAASb,OAAAA,EAAS,CAAA;;sCAChEF,cAAA,CAACgB,uBAAAA,EAAAA;4BAAWC,OAAAA,EAAQ,OAAA;4BAAQC,SAAAA,EAAU,YAAA;sCACnCjD,aAAAA,CACC;AACEkD,gCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,gCAAA,CAAA;gCACZC,cAAAA,EAAgB;6BAClB,EACA;AACEzD,gCAAAA,IAAAA,gBAAMoC,cAAA,CAACsB,QAAAA,EAAAA;AAAQvD,oCAAAA,QAAAA,EAAAA;;AACjB,6BAAA;;AAGJ,sCAAA2C,eAAA,CAACa,oBAAOC,IAAI,EAAA;4BAACC,IAAAA,EAAMlD,iBAAAA;4BAAmBmD,YAAAA,EAAclD,oBAAAA;;AAClD,8CAAAwB,cAAA,CAACuB,oBAAOI,OAAO,EAAA;AACb,oCAAA,QAAA,gBAAA3B,cAAA,CAAC4B,uBAAAA,EAAAA;wCAAWC,KAAAA,EAAM,QAAA;AAChB,wCAAA,QAAA,gBAAA7B,cAAA,CAAC8B,WAAAA,EAAAA,EAAAA;;;8CAGL9B,cAAA,CAAC+B,yBAAAA,EAAAA;oCAAcC,SAAAA,EAAW1C,YAAAA;8CACvBrB,aAAAA,CAAc;AACbkD,wCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,2CAAA,CAAA;wCACZC,cAAAA,EAAgB;AAClB,qCAAA;;;;;;8BAKNX,eAAA,CAACT,gBAAAA,EAAAA;oBAAII,UAAAA,EAAW,YAAA;oBAAaH,OAAAA,EAAS,CAAA;;sCACpCF,cAAA,CAACC,gBAAAA,EAAAA;4BAAIgC,aAAAA,EAAe,CAAA;AAClB,4BAAA,QAAA,gBAAAjC,cAAA,CAACgB,uBAAAA,EAAAA;gCACCC,OAAAA,EAAQ,OAAA;gCACRC,SAAAA,EAAU,YAAA;gCACVgB,KAAAA,EAAO;oCAAEC,aAAAA,EAAe,WAAA;oCAAaC,aAAAA,EAAe;AAAE,iCAAA;0CAErDnE,aAAAA,CAAc;AAAEkD,oCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,6BAAA,CAAA;oCAAgCC,cAAAA,EAAgB;AAAK,iCAAA;;;sCAGtFX,eAAA,CAACG,iBAAAA,EAAAA;4BAAKwB,GAAAA,EAAK,CAAA;;8CACTrC,cAAA,CAACC,gBAAAA,EAAAA;oCAAIqC,QAAAA,EAAU,CAAA;oCAAGC,IAAAA,EAAM,CAAA;4DACtBvC,cAAA,CAACwC,mBAAMhB,IAAI,EAAA;wCAAC5D,IAAAA,EAAM,CAAA,EAAGA,IAAAA,CAAK,MAAM,CAAC;AAC/B,wCAAA,QAAA,gBAAAoC,cAAA,CAACyC,yBAAAA,EAAAA;AACCzF,4CAAAA,KAAAA,EAAOmB,WAAWrB,SAAS;4CAC3Be,QAAAA,EAAU0B,iBAAAA;AACVmD,4CAAAA,WAAAA,EAAazE,aAAAA,CAAc;AACzBkD,gDAAAA,EAAAA,EAAIC,eAAAA,CAAQ,gCAAA,CAAA;gDACZC,cAAAA,EAAgB;AAClB,6CAAA,CAAA;AAECrD,4CAAAA,QAAAA,EAAAA,eAAAA,CAAgB2E,GAAG,CAAC,CAAC7D,KAAAA,iBACpBkB,cAAA,CAAC4C,+BAAAA,EAAAA;AAAoC5F,oDAAAA,KAAAA,EAAO8B,MAAMlB,IAAI;AACpD,oDAAA,QAAA,gBAAA8C,eAAA,CAACG,iBAAAA,EAAAA;wDAAKwB,GAAAA,EAAK,CAAA;wDAAGtB,UAAAA,EAAW,QAAA;;0EACvBf,cAAA,CAACzD,kBAAAA,EAAAA;AAAmByC,gEAAAA,IAAAA,EAAMF,MAAME;;0EAChCgB,cAAA,CAAC6C,MAAAA,EAAAA;AAAM/D,gEAAAA,QAAAA,EAAAA,KAAAA,CAAMlB;;;;AAHQkB,iDAAAA,EAAAA,KAAAA,CAAMlB,IAAI,CAAA;;;;8CAU3CoC,cAAA,CAACC,gBAAAA,EAAAA;oCAAIqC,QAAAA,EAAU,CAAA;oCAAGC,IAAAA,EAAM,CAAA;4DACtBvC,cAAA,CAACwC,mBAAMhB,IAAI,EAAA;wCAAC5D,IAAAA,EAAM,CAAA,EAAGA,IAAAA,CAAK,SAAS,CAAC;AAClC,wCAAA,QAAA,gBAAA8C,eAAA,CAAC+B,yBAAAA,EAAAA;AACCzF,4CAAAA,KAAAA,EAAOmB,WAAWpB,QAAQ;4CAC1Bc,QAAAA,EAAUgC,oBAAAA;4CACViD,QAAAA,EAAU,CAAC3E,WAAWrB,SAAS;AAC/B4F,4CAAAA,WAAAA,EAAazE,aAAAA,CAAc;AACzBkD,gDAAAA,EAAAA,EAAIC,eAAAA,CAAQ,mCAAA,CAAA;gDACZC,cAAAA,EAAgB;AAClB,6CAAA,CAAA;;8DAEArB,cAAA,CAAC4C,+BAAAA,EAAAA;oDAAmB5F,KAAAA,EAAM,IAAA;8DACvBiB,aAAAA,CAAc;AACbkD,wDAAAA,EAAAA,EAAIC,eAAAA,CAAQ,sCAAA,CAAA;wDACZC,cAAAA,EAAgB;AAClB,qDAAA;;8DAEFrB,cAAA,CAAC4C,+BAAAA,EAAAA;oDAAmB5F,KAAAA,EAAM,OAAA;8DACvBiB,aAAAA,CAAc;AACbkD,wDAAAA,EAAAA,EAAIC,eAAAA,CAAQ,yCAAA,CAAA;wDACZC,cAAAA,EAAgB;AAClB,qDAAA;;;;;;8CAMRrB,cAAA,CAACC,gBAAAA,EAAAA;oCAAIqC,QAAAA,EAAU,CAAA;oCAAGC,IAAAA,EAAM,CAAA;4DACtBvC,cAAA,CAACwC,mBAAMhB,IAAI,EAAA;wCAAC5D,IAAAA,EAAM,CAAA,EAAGA,IAAAA,CAAK,MAAM,CAAC;AAC/B,wCAAA,QAAA,gBAAAoC,cAAA,CAACyC,yBAAAA,EAAAA;4CACCzF,KAAAA,EAAOmB,UAAAA,CAAWnB,KAAK,EAAE0C,QAAAA,EAAAA,IAAc,EAAA;4CACvC7B,QAAAA,EAAUiC,iBAAAA;4CACVgD,QAAAA,EAAU,CAAC3E,WAAWrB,SAAS;AAC/B4F,4CAAAA,WAAAA,EAAazE,aAAAA,CAAc;AACzBkD,gDAAAA,EAAAA,EAAIC,eAAAA,CAAQ,gCAAA,CAAA;gDACZC,cAAAA,EAAgB;AAClB,6CAAA,CAAA;sDAECtC,WAAAA,IAAeH,aAAAA,EAAemE,OAC7BnE,aAAAA,CAAcmE,IAAI,CAACJ,GAAG,CAAC,CAACK,SAAAA,iBACtBhD,cAAA,CAAC4C,+BAAAA,EAAAA;oDAAmC5F,KAAAA,EAAOgG,SAAAA;AACxCA,oDAAAA,QAAAA,EAAAA;mDADsBA,SAAAA,CAAAA,CAAAA,iBAK3BtC,eAAA,CAAAuC,mBAAA,EAAA;;kEACEjD,cAAA,CAAC4C,+BAAAA,EAAAA;wDAAmB5F,KAAAA,EAAM,MAAA;kEACvBiB,aAAAA,CAAc;AACbkD,4DAAAA,EAAAA,EAAIC,eAAAA,CAAQ,qCAAA,CAAA;4DACZC,cAAAA,EAAgB;AAClB,yDAAA;;kEAEFrB,cAAA,CAAC4C,+BAAAA,EAAAA;wDAAmB5F,KAAAA,EAAM,OAAA;kEACvBiB,aAAAA,CAAc;AACbkD,4DAAAA,EAAAA,EAAIC,eAAAA,CAAQ,sCAAA,CAAA;4DACZC,cAAAA,EAAgB;AAClB,yDAAA;;;;;;;;;;;8BAUhBX,eAAA,CAACT,gBAAAA,EAAAA;oBAAII,UAAAA,EAAW,YAAA;oBAAaH,OAAAA,EAAS,CAAA;;sCACpCF,cAAA,CAACC,gBAAAA,EAAAA;4BAAIgC,aAAAA,EAAe,CAAA;AAClB,4BAAA,QAAA,gBAAAjC,cAAA,CAACgB,uBAAAA,EAAAA;gCACCC,OAAAA,EAAQ,OAAA;gCACRC,SAAAA,EAAU,YAAA;gCACVgB,KAAAA,EAAO;oCAAEC,aAAAA,EAAe,WAAA;oCAAaC,aAAAA,EAAe;AAAE,iCAAA;0CAErDnE,aAAAA,CAAc;AACbkD,oCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,+BAAA,CAAA;oCACZC,cAAAA,EAAgB;AAClB,iCAAA;;;sCAGJrB,cAAA,CAACC,gBAAAA,EAAAA;4BAAIgC,aAAAA,EAAe,CAAA;oDAClBjC,cAAA,CAACwC,mBAAMhB,IAAI,EAAA;gCAAC5D,IAAAA,EAAM,CAAA,EAAGA,IAAAA,CAAK,OAAO,CAAC;AAChC,gCAAA,QAAA,gBAAA8C,eAAA,CAAC+B,yBAAAA,EAAAA;AACCzF,oCAAAA,KAAAA,EAAOmB,WAAWlB,MAAM;oCACxBY,QAAAA,EAAUkC,kBAAAA;AACV2C,oCAAAA,WAAAA,EAAazE,aAAAA,CAAc;AACzBkD,wCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,iCAAA,CAAA;wCACZC,cAAAA,EAAgB;AAClB,qCAAA,CAAA;;sDAEAX,eAAA,CAACkC,+BAAAA,EAAAA;4CAAmB5F,KAAAA,EAAM,MAAA;;AAAO,gDAAA,OAAA;8DAC1BgD,cAAA,CAAC6C,MAAAA,EAAAA;oDAAKX,KAAAA,EAAO;wDAAEgB,UAAAA,EAAY;AAAO,qDAAA;8DAAInF,aAAAA,IAAiBH;;;;sDAE9D8C,eAAA,CAACkC,+BAAAA,EAAAA;4CAAmB5F,KAAAA,EAAM,MAAA;;AAAO,gDAAA,OAAA;8DAC1BgD,cAAA,CAAC6C,MAAAA,EAAAA;oDAAKX,KAAAA,EAAO;wDAAEgB,UAAAA,EAAY;AAAO,qDAAA;8DAAInF,aAAAA,IAAiBH;;;;;;;;;;;;;AAS9E;;;;"}
@@ -63,7 +63,7 @@ const convertToJsonLogic = (value)=>{
63
63
  [operator]: conditionRule
64
64
  }
65
65
  };
66
- } catch (error) {
66
+ } catch {
67
67
  return null;
68
68
  }
69
69
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionForm.mjs","sources":["../../../../../admin/src/components/FormModal/attributes/ConditionForm.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useState } from 'react';\n\nimport { createRulesEngine, ConfirmDialog, type Condition } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n Field,\n SingleSelect,\n SingleSelectOption,\n Dialog,\n} from '@strapi/design-system';\nimport { Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AttributeIcon } from '../../../components/AttributeIcon';\nimport { getFirstVisibleConditionEntry } from '../../../utils/conditions';\nimport { getTrad } from '../../../utils/getTrad';\nimport { ApplyConditionButton } from '../../ApplyConditionButton';\n\nimport type {\n AttributeConditions,\n AttributeConditionRule,\n AttributeConditionValue,\n} from '../../../types';\n\nconst SmallAttributeIcon = styled(AttributeIcon)`\n width: 16px !important;\n height: 16px !important;\n svg {\n width: 16px !important;\n height: 16px !important;\n }\n`;\n\ninterface ConditionFormProps {\n name: string;\n value?: AttributeConditions | null;\n onChange: (e: { target: { name: string; value?: AttributeConditions | null } }) => void;\n onDelete: () => void;\n attributeName?: string;\n conditionFields?: Array<{\n name: string;\n type: string;\n enum?: string[];\n }>;\n allAttributes?: Array<{\n name: string;\n type: string;\n }>;\n}\n\ninterface LocalValue {\n dependsOn: string;\n operator: 'is' | 'isNot';\n value: AttributeConditionValue;\n action: 'show' | 'hide';\n}\n\nconst convertFromJsonLogic = (jsonLogic?: AttributeConditions | null): LocalValue => {\n const conditionEntry = getFirstVisibleConditionEntry(jsonLogic);\n\n if (conditionEntry === null) {\n return {\n dependsOn: '',\n operator: 'is',\n value: '',\n action: 'show',\n };\n }\n\n const { operator, fieldVar, value } = conditionEntry;\n\n // Assume 'visible' implies 'show' for now; adjust if backend uses 'hidden' key\n return {\n dependsOn: fieldVar.var,\n operator: operator === '==' ? 'is' : 'isNot',\n value: value,\n action: 'show', // Default to 'show' for 'visible'; adjust based on backend logic\n };\n};\n\nconst convertToJsonLogic = (value: LocalValue): AttributeConditions | null => {\n if (value.dependsOn === '') {\n return null;\n }\n\n const rulesEngine = createRulesEngine();\n const condition: Condition = {\n dependsOn: value.dependsOn,\n operator: value.operator,\n value: value.value,\n };\n\n try {\n rulesEngine.validate(condition);\n // Determine JSON Logic operator based on operator and action\n const operator =\n (value.operator === 'is' && value.action === 'show') ||\n (value.operator === 'isNot' && value.action === 'hide')\n ? '=='\n : '!=';\n const conditionRule: AttributeConditionRule = [{ var: value.dependsOn }, value.value];\n return {\n visible: {\n [operator]: conditionRule,\n },\n };\n } catch (error) {\n return null;\n }\n};\n\nexport const ConditionForm = ({\n name,\n value,\n onChange,\n onDelete,\n attributeName,\n conditionFields = [],\n}: ConditionFormProps) => {\n const { formatMessage } = useIntl();\n const [localValue, setLocalValue] = React.useState<LocalValue>(convertFromJsonLogic(value));\n const [showConfirmDialog, setShowConfirmDialog] = useState(false);\n const hasCondition = getFirstVisibleConditionEntry(value) !== null;\n\n // Add safety check for conditionFields\n if (!Array.isArray(conditionFields)) {\n conditionFields = [];\n }\n\n const selectedField = conditionFields.find((field) => field.name === localValue.dependsOn);\n const isEnumField = selectedField?.type === 'enumeration';\n\n // Helper to update localValue and propagate JSON Logic\n const updateCondition = (updatedValue: LocalValue) => {\n setLocalValue(updatedValue);\n const rulesEngine = createRulesEngine();\n const condition: Condition = {\n dependsOn: updatedValue.dependsOn,\n operator: updatedValue.operator,\n value: updatedValue.value,\n };\n try {\n rulesEngine.validate(condition);\n const operator =\n (updatedValue.operator === 'is' && updatedValue.action === 'show') ||\n (updatedValue.operator === 'isNot' && updatedValue.action === 'hide')\n ? '=='\n : '!=';\n const conditionRule: AttributeConditionRule = [\n { var: updatedValue.dependsOn },\n updatedValue.value,\n ];\n const jsonLogic: AttributeConditions | null = updatedValue.dependsOn\n ? {\n visible: {\n [operator]: conditionRule,\n },\n }\n : null;\n if (jsonLogic) {\n onChange({\n target: {\n name,\n value: jsonLogic,\n },\n });\n }\n } catch {\n // Optionally, show an error to the user\n }\n };\n\n const handleApplyCondition = () => {\n const initialValue: LocalValue = {\n dependsOn: '',\n operator: 'is',\n value: '',\n action: 'show',\n };\n setLocalValue(initialValue);\n onChange({\n target: {\n name,\n value: convertToJsonLogic(initialValue),\n },\n });\n };\n\n const handleDelete = () => {\n setLocalValue({\n dependsOn: '',\n operator: 'is',\n value: '',\n action: 'show',\n });\n onChange({\n target: {\n name,\n value: null,\n },\n });\n onDelete();\n setShowConfirmDialog(false);\n };\n\n const handleFieldChange = (fieldName: string | number) => {\n const newValue = fieldName?.toString() || '';\n const field = conditionFields.find((f) => f.name === newValue);\n const isNewFieldEnum = field?.type === 'enumeration';\n const updatedValue: LocalValue = {\n ...localValue,\n dependsOn: newValue,\n value: newValue ? (isNewFieldEnum ? '' : false) : localValue.value,\n };\n updateCondition(updatedValue);\n };\n\n const handleOperatorChange = (operator: string | number) => {\n const newValue = operator?.toString() || 'is';\n const updatedValue: LocalValue = {\n ...localValue,\n operator: newValue as 'is' | 'isNot',\n };\n updateCondition(updatedValue);\n };\n\n const handleValueChange = (newValue: string | number) => {\n const value = isEnumField ? newValue?.toString() : newValue?.toString() === 'true';\n const updatedValue: LocalValue = { ...localValue, value };\n updateCondition(updatedValue);\n };\n\n const handleActionChange = (action: string | number) => {\n const newValue = action?.toString() || 'show';\n const updatedValue: LocalValue = {\n ...localValue,\n action: newValue as 'show' | 'hide',\n };\n updateCondition(updatedValue);\n };\n\n if (!hasCondition) {\n return (\n <Box padding={4} margin={4} hasRadius background=\"neutral0\" borderColor=\"neutral200\">\n <ApplyConditionButton onClick={handleApplyCondition} />\n </Box>\n );\n }\n\n return (\n <Box marginTop={2}>\n <Box\n background=\"neutral0\"\n hasRadius\n borderColor=\"neutral200\"\n borderWidth={0.5}\n borderStyle=\"solid\"\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\" padding={4}>\n <Typography variant=\"sigma\" textColor=\"neutral800\">\n {formatMessage(\n {\n id: getTrad('form.attribute.condition.title'),\n defaultMessage: 'Condition for {name}',\n },\n {\n name: <strong>{attributeName}</strong>,\n }\n )}\n </Typography>\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <IconButton label=\"Delete\">\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleDelete}>\n {formatMessage({\n id: getTrad('popUpWarning.bodyMessage.delete-condition'),\n defaultMessage: 'Are you sure you want to delete this condition?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </Flex>\n\n <Box background=\"neutral100\" padding={4}>\n <Box paddingBottom={2}>\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n style={{ textTransform: 'uppercase', letterSpacing: 1 }}\n >\n {formatMessage({ id: getTrad('form.attribute.condition.if'), defaultMessage: 'IF' })}\n </Typography>\n </Box>\n <Flex gap={4}>\n <Box minWidth={0} flex={1}>\n <Field.Root name={`${name}.field`}>\n <SingleSelect\n value={localValue.dependsOn}\n onChange={handleFieldChange}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.field'),\n defaultMessage: 'field',\n })}\n >\n {conditionFields.map((field) => (\n <SingleSelectOption key={field.name} value={field.name}>\n <Flex gap={2} alignItems=\"center\">\n <SmallAttributeIcon type={field.type} />\n <span>{field.name}</span>\n </Flex>\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Box>\n <Box minWidth={0} flex={1}>\n <Field.Root name={`${name}.operator`}>\n <SingleSelect\n value={localValue.operator}\n onChange={handleOperatorChange}\n disabled={!localValue.dependsOn}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.operator'),\n defaultMessage: 'condition',\n })}\n >\n <SingleSelectOption value=\"is\">\n {formatMessage({\n id: getTrad('form.attribute.condition.operator.is'),\n defaultMessage: 'is',\n })}\n </SingleSelectOption>\n <SingleSelectOption value=\"isNot\">\n {formatMessage({\n id: getTrad('form.attribute.condition.operator.isNot'),\n defaultMessage: 'is not',\n })}\n </SingleSelectOption>\n </SingleSelect>\n </Field.Root>\n </Box>\n\n <Box minWidth={0} flex={1}>\n <Field.Root name={`${name}.value`}>\n <SingleSelect\n value={localValue.value?.toString() || ''}\n onChange={handleValueChange}\n disabled={!localValue.dependsOn}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.value'),\n defaultMessage: 'value',\n })}\n >\n {isEnumField && selectedField?.enum ? (\n selectedField.enum.map((enumValue) => (\n <SingleSelectOption key={enumValue} value={enumValue}>\n {enumValue}\n </SingleSelectOption>\n ))\n ) : (\n <>\n <SingleSelectOption value=\"true\">\n {formatMessage({\n id: getTrad('form.attribute.condition.value.true'),\n defaultMessage: 'true',\n })}\n </SingleSelectOption>\n <SingleSelectOption value=\"false\">\n {formatMessage({\n id: getTrad('form.attribute.condition.value.false'),\n defaultMessage: 'false',\n })}\n </SingleSelectOption>\n </>\n )}\n </SingleSelect>\n </Field.Root>\n </Box>\n </Flex>\n </Box>\n\n <Box background=\"neutral100\" padding={4}>\n <Box paddingBottom={4}>\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n style={{ textTransform: 'uppercase', letterSpacing: 1 }}\n >\n {formatMessage({\n id: getTrad('form.attribute.condition.then'),\n defaultMessage: 'THEN',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={4}>\n <Field.Root name={`${name}.action`}>\n <SingleSelect\n value={localValue.action}\n onChange={handleActionChange}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.action'),\n defaultMessage: 'action',\n })}\n >\n <SingleSelectOption value=\"show\">\n Show <span style={{ fontWeight: 'bold' }}>{attributeName || name}</span>\n </SingleSelectOption>\n <SingleSelectOption value=\"hide\">\n Hide <span style={{ fontWeight: 'bold' }}>{attributeName || name}</span>\n </SingleSelectOption>\n </SingleSelect>\n </Field.Root>\n </Box>\n </Box>\n </Box>\n </Box>\n );\n};\n"],"names":["SmallAttributeIcon","styled","AttributeIcon","convertFromJsonLogic","jsonLogic","conditionEntry","getFirstVisibleConditionEntry","dependsOn","operator","value","action","fieldVar","var","convertToJsonLogic","rulesEngine","createRulesEngine","condition","validate","conditionRule","visible","error","ConditionForm","name","onChange","onDelete","attributeName","conditionFields","formatMessage","useIntl","localValue","setLocalValue","React","useState","showConfirmDialog","setShowConfirmDialog","hasCondition","Array","isArray","selectedField","find","field","isEnumField","type","updateCondition","updatedValue","target","handleApplyCondition","initialValue","handleDelete","handleFieldChange","fieldName","newValue","toString","f","isNewFieldEnum","handleOperatorChange","handleValueChange","handleActionChange","_jsx","Box","padding","margin","hasRadius","background","borderColor","ApplyConditionButton","onClick","marginTop","_jsxs","borderWidth","borderStyle","Flex","justifyContent","alignItems","Typography","variant","textColor","id","getTrad","defaultMessage","strong","Dialog","Root","open","onOpenChange","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","paddingBottom","style","textTransform","letterSpacing","gap","minWidth","flex","Field","SingleSelect","placeholder","map","SingleSelectOption","span","disabled","enum","enumValue","_Fragment","fontWeight"],"mappings":"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"}
1
+ {"version":3,"file":"ConditionForm.mjs","sources":["../../../../../admin/src/components/FormModal/attributes/ConditionForm.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useState } from 'react';\n\nimport { createRulesEngine, ConfirmDialog, type Condition } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n Field,\n SingleSelect,\n SingleSelectOption,\n Dialog,\n} from '@strapi/design-system';\nimport { Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AttributeIcon } from '../../../components/AttributeIcon';\nimport { getFirstVisibleConditionEntry } from '../../../utils/conditions';\nimport { getTrad } from '../../../utils/getTrad';\nimport { ApplyConditionButton } from '../../ApplyConditionButton';\n\nimport type {\n AttributeConditions,\n AttributeConditionRule,\n AttributeConditionValue,\n} from '../../../types';\n\nconst SmallAttributeIcon = styled(AttributeIcon)`\n width: 16px !important;\n height: 16px !important;\n svg {\n width: 16px !important;\n height: 16px !important;\n }\n`;\n\ninterface ConditionFormProps {\n name: string;\n value?: AttributeConditions | null;\n onChange: (e: { target: { name: string; value?: AttributeConditions | null } }) => void;\n onDelete: () => void;\n attributeName?: string;\n conditionFields?: Array<{\n name: string;\n type: string;\n enum?: string[];\n }>;\n allAttributes?: Array<{\n name: string;\n type: string;\n }>;\n}\n\ninterface LocalValue {\n dependsOn: string;\n operator: 'is' | 'isNot';\n value: AttributeConditionValue;\n action: 'show' | 'hide';\n}\n\nconst convertFromJsonLogic = (jsonLogic?: AttributeConditions | null): LocalValue => {\n const conditionEntry = getFirstVisibleConditionEntry(jsonLogic);\n\n if (conditionEntry === null) {\n return {\n dependsOn: '',\n operator: 'is',\n value: '',\n action: 'show',\n };\n }\n\n const { operator, fieldVar, value } = conditionEntry;\n\n // Assume 'visible' implies 'show' for now; adjust if backend uses 'hidden' key\n return {\n dependsOn: fieldVar.var,\n operator: operator === '==' ? 'is' : 'isNot',\n value: value,\n action: 'show', // Default to 'show' for 'visible'; adjust based on backend logic\n };\n};\n\nconst convertToJsonLogic = (value: LocalValue): AttributeConditions | null => {\n if (value.dependsOn === '') {\n return null;\n }\n\n const rulesEngine = createRulesEngine();\n const condition: Condition = {\n dependsOn: value.dependsOn,\n operator: value.operator,\n value: value.value,\n };\n\n try {\n rulesEngine.validate(condition);\n // Determine JSON Logic operator based on operator and action\n const operator =\n (value.operator === 'is' && value.action === 'show') ||\n (value.operator === 'isNot' && value.action === 'hide')\n ? '=='\n : '!=';\n const conditionRule: AttributeConditionRule = [{ var: value.dependsOn }, value.value];\n return {\n visible: {\n [operator]: conditionRule,\n },\n };\n } catch {\n return null;\n }\n};\n\nexport const ConditionForm = ({\n name,\n value,\n onChange,\n onDelete,\n attributeName,\n conditionFields = [],\n}: ConditionFormProps) => {\n const { formatMessage } = useIntl();\n const [localValue, setLocalValue] = React.useState<LocalValue>(convertFromJsonLogic(value));\n const [showConfirmDialog, setShowConfirmDialog] = useState(false);\n const hasCondition = getFirstVisibleConditionEntry(value) !== null;\n\n // Add safety check for conditionFields\n if (!Array.isArray(conditionFields)) {\n conditionFields = [];\n }\n\n const selectedField = conditionFields.find((field) => field.name === localValue.dependsOn);\n const isEnumField = selectedField?.type === 'enumeration';\n\n // Helper to update localValue and propagate JSON Logic\n const updateCondition = (updatedValue: LocalValue) => {\n setLocalValue(updatedValue);\n const rulesEngine = createRulesEngine();\n const condition: Condition = {\n dependsOn: updatedValue.dependsOn,\n operator: updatedValue.operator,\n value: updatedValue.value,\n };\n try {\n rulesEngine.validate(condition);\n const operator =\n (updatedValue.operator === 'is' && updatedValue.action === 'show') ||\n (updatedValue.operator === 'isNot' && updatedValue.action === 'hide')\n ? '=='\n : '!=';\n const conditionRule: AttributeConditionRule = [\n { var: updatedValue.dependsOn },\n updatedValue.value,\n ];\n const jsonLogic: AttributeConditions | null = updatedValue.dependsOn\n ? {\n visible: {\n [operator]: conditionRule,\n },\n }\n : null;\n if (jsonLogic) {\n onChange({\n target: {\n name,\n value: jsonLogic,\n },\n });\n }\n } catch {\n // Optionally, show an error to the user\n }\n };\n\n const handleApplyCondition = () => {\n const initialValue: LocalValue = {\n dependsOn: '',\n operator: 'is',\n value: '',\n action: 'show',\n };\n setLocalValue(initialValue);\n onChange({\n target: {\n name,\n value: convertToJsonLogic(initialValue),\n },\n });\n };\n\n const handleDelete = () => {\n setLocalValue({\n dependsOn: '',\n operator: 'is',\n value: '',\n action: 'show',\n });\n onChange({\n target: {\n name,\n value: null,\n },\n });\n onDelete();\n setShowConfirmDialog(false);\n };\n\n const handleFieldChange = (fieldName: string | number) => {\n const newValue = fieldName?.toString() || '';\n const field = conditionFields.find((f) => f.name === newValue);\n const isNewFieldEnum = field?.type === 'enumeration';\n const updatedValue: LocalValue = {\n ...localValue,\n dependsOn: newValue,\n value: newValue ? (isNewFieldEnum ? '' : false) : localValue.value,\n };\n updateCondition(updatedValue);\n };\n\n const handleOperatorChange = (operator: string | number) => {\n const newValue = operator?.toString() || 'is';\n const updatedValue: LocalValue = {\n ...localValue,\n operator: newValue as 'is' | 'isNot',\n };\n updateCondition(updatedValue);\n };\n\n const handleValueChange = (newValue: string | number) => {\n const value = isEnumField ? newValue?.toString() : newValue?.toString() === 'true';\n const updatedValue: LocalValue = { ...localValue, value };\n updateCondition(updatedValue);\n };\n\n const handleActionChange = (action: string | number) => {\n const newValue = action?.toString() || 'show';\n const updatedValue: LocalValue = {\n ...localValue,\n action: newValue as 'show' | 'hide',\n };\n updateCondition(updatedValue);\n };\n\n if (!hasCondition) {\n return (\n <Box padding={4} margin={4} hasRadius background=\"neutral0\" borderColor=\"neutral200\">\n <ApplyConditionButton onClick={handleApplyCondition} />\n </Box>\n );\n }\n\n return (\n <Box marginTop={2}>\n <Box\n background=\"neutral0\"\n hasRadius\n borderColor=\"neutral200\"\n borderWidth={0.5}\n borderStyle=\"solid\"\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\" padding={4}>\n <Typography variant=\"sigma\" textColor=\"neutral800\">\n {formatMessage(\n {\n id: getTrad('form.attribute.condition.title'),\n defaultMessage: 'Condition for {name}',\n },\n {\n name: <strong>{attributeName}</strong>,\n }\n )}\n </Typography>\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <IconButton label=\"Delete\">\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleDelete}>\n {formatMessage({\n id: getTrad('popUpWarning.bodyMessage.delete-condition'),\n defaultMessage: 'Are you sure you want to delete this condition?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </Flex>\n\n <Box background=\"neutral100\" padding={4}>\n <Box paddingBottom={2}>\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n style={{ textTransform: 'uppercase', letterSpacing: 1 }}\n >\n {formatMessage({ id: getTrad('form.attribute.condition.if'), defaultMessage: 'IF' })}\n </Typography>\n </Box>\n <Flex gap={4}>\n <Box minWidth={0} flex={1}>\n <Field.Root name={`${name}.field`}>\n <SingleSelect\n value={localValue.dependsOn}\n onChange={handleFieldChange}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.field'),\n defaultMessage: 'field',\n })}\n >\n {conditionFields.map((field) => (\n <SingleSelectOption key={field.name} value={field.name}>\n <Flex gap={2} alignItems=\"center\">\n <SmallAttributeIcon type={field.type} />\n <span>{field.name}</span>\n </Flex>\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Box>\n <Box minWidth={0} flex={1}>\n <Field.Root name={`${name}.operator`}>\n <SingleSelect\n value={localValue.operator}\n onChange={handleOperatorChange}\n disabled={!localValue.dependsOn}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.operator'),\n defaultMessage: 'condition',\n })}\n >\n <SingleSelectOption value=\"is\">\n {formatMessage({\n id: getTrad('form.attribute.condition.operator.is'),\n defaultMessage: 'is',\n })}\n </SingleSelectOption>\n <SingleSelectOption value=\"isNot\">\n {formatMessage({\n id: getTrad('form.attribute.condition.operator.isNot'),\n defaultMessage: 'is not',\n })}\n </SingleSelectOption>\n </SingleSelect>\n </Field.Root>\n </Box>\n\n <Box minWidth={0} flex={1}>\n <Field.Root name={`${name}.value`}>\n <SingleSelect\n value={localValue.value?.toString() || ''}\n onChange={handleValueChange}\n disabled={!localValue.dependsOn}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.value'),\n defaultMessage: 'value',\n })}\n >\n {isEnumField && selectedField?.enum ? (\n selectedField.enum.map((enumValue) => (\n <SingleSelectOption key={enumValue} value={enumValue}>\n {enumValue}\n </SingleSelectOption>\n ))\n ) : (\n <>\n <SingleSelectOption value=\"true\">\n {formatMessage({\n id: getTrad('form.attribute.condition.value.true'),\n defaultMessage: 'true',\n })}\n </SingleSelectOption>\n <SingleSelectOption value=\"false\">\n {formatMessage({\n id: getTrad('form.attribute.condition.value.false'),\n defaultMessage: 'false',\n })}\n </SingleSelectOption>\n </>\n )}\n </SingleSelect>\n </Field.Root>\n </Box>\n </Flex>\n </Box>\n\n <Box background=\"neutral100\" padding={4}>\n <Box paddingBottom={4}>\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n style={{ textTransform: 'uppercase', letterSpacing: 1 }}\n >\n {formatMessage({\n id: getTrad('form.attribute.condition.then'),\n defaultMessage: 'THEN',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={4}>\n <Field.Root name={`${name}.action`}>\n <SingleSelect\n value={localValue.action}\n onChange={handleActionChange}\n placeholder={formatMessage({\n id: getTrad('form.attribute.condition.action'),\n defaultMessage: 'action',\n })}\n >\n <SingleSelectOption value=\"show\">\n Show <span style={{ fontWeight: 'bold' }}>{attributeName || name}</span>\n </SingleSelectOption>\n <SingleSelectOption value=\"hide\">\n Hide <span style={{ fontWeight: 'bold' }}>{attributeName || name}</span>\n </SingleSelectOption>\n </SingleSelect>\n </Field.Root>\n </Box>\n </Box>\n </Box>\n </Box>\n );\n};\n"],"names":["SmallAttributeIcon","styled","AttributeIcon","convertFromJsonLogic","jsonLogic","conditionEntry","getFirstVisibleConditionEntry","dependsOn","operator","value","action","fieldVar","var","convertToJsonLogic","rulesEngine","createRulesEngine","condition","validate","conditionRule","visible","ConditionForm","name","onChange","onDelete","attributeName","conditionFields","formatMessage","useIntl","localValue","setLocalValue","React","useState","showConfirmDialog","setShowConfirmDialog","hasCondition","Array","isArray","selectedField","find","field","isEnumField","type","updateCondition","updatedValue","target","handleApplyCondition","initialValue","handleDelete","handleFieldChange","fieldName","newValue","toString","f","isNewFieldEnum","handleOperatorChange","handleValueChange","handleActionChange","_jsx","Box","padding","margin","hasRadius","background","borderColor","ApplyConditionButton","onClick","marginTop","_jsxs","borderWidth","borderStyle","Flex","justifyContent","alignItems","Typography","variant","textColor","id","getTrad","defaultMessage","strong","Dialog","Root","open","onOpenChange","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","paddingBottom","style","textTransform","letterSpacing","gap","minWidth","flex","Field","SingleSelect","placeholder","map","SingleSelectOption","span","disabled","enum","enumValue","_Fragment","fontWeight"],"mappings":"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"}
@@ -430,6 +430,7 @@ const advancedForm = {
430
430
  defaultMessage: 'Settings'
431
431
  },
432
432
  items: [
433
+ attributeOptions.attributeOptions.required,
433
434
  attributeOptions.attributeOptions.private
434
435
  ]
435
436
  },