@plumile/backoffice-react 0.1.106 → 0.1.108

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 (177) hide show
  1. package/lib/esm/auth/TotpQrCode.js +1 -1
  2. package/lib/esm/auth/TotpQrCode.js.map +1 -1
  3. package/lib/esm/auth/login/EmailCapturePanel.js +27 -23
  4. package/lib/esm/auth/login/EmailCapturePanel.js.map +1 -1
  5. package/lib/esm/auth/login/MfaChallengeForm.js +38 -36
  6. package/lib/esm/auth/login/MfaChallengeForm.js.map +1 -1
  7. package/lib/esm/auth/login/PasskeyLoginForm.js +40 -37
  8. package/lib/esm/auth/login/PasskeyLoginForm.js.map +1 -1
  9. package/lib/esm/auth/pages/AcceptInvitationScreen.js +63 -62
  10. package/lib/esm/auth/pages/AcceptInvitationScreen.js.map +1 -1
  11. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js +56 -55
  12. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js.map +1 -1
  13. package/lib/esm/auth/pages/PasswordResetRequestScreen.js +45 -45
  14. package/lib/esm/auth/pages/PasswordResetRequestScreen.js.map +1 -1
  15. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js +1 -0
  16. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js.map +1 -1
  17. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +44 -39
  18. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +1 -1
  19. package/lib/esm/components/backoffice/detail/BackofficeCopyButton.js +15 -0
  20. package/lib/esm/components/backoffice/detail/BackofficeCopyButton.js.map +1 -0
  21. package/lib/esm/components/backoffice/detail/BackofficeDetailActionBar.js +11 -0
  22. package/lib/esm/components/backoffice/detail/BackofficeDetailActionBar.js.map +1 -0
  23. package/lib/esm/components/backoffice/detail/BackofficeDetailBlock.js +7 -0
  24. package/lib/esm/components/backoffice/detail/BackofficeDetailBlock.js.map +1 -0
  25. package/lib/esm/components/backoffice/detail/BackofficeDetailHeader.js +15 -0
  26. package/lib/esm/components/backoffice/detail/BackofficeDetailHeader.js.map +1 -0
  27. package/lib/esm/components/backoffice/detail/BackofficeDetailPage.js +19 -0
  28. package/lib/esm/components/backoffice/detail/BackofficeDetailPage.js.map +1 -0
  29. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js +47 -40
  30. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js.map +1 -1
  31. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js +83 -90
  32. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js.map +1 -1
  33. package/lib/esm/components/backoffice/detail/BackofficeDetailTable.js +8 -0
  34. package/lib/esm/components/backoffice/detail/BackofficeDetailTable.js.map +1 -0
  35. package/lib/esm/components/backoffice/detail/BackofficeEmptyValue.js +7 -0
  36. package/lib/esm/components/backoffice/detail/BackofficeEmptyValue.js.map +1 -0
  37. package/lib/esm/components/backoffice/detail/BackofficeStatusGroup.js +8 -0
  38. package/lib/esm/components/backoffice/detail/BackofficeStatusGroup.js.map +1 -0
  39. package/lib/esm/components/backoffice/detail/BackofficeTechnicalFacts.js +2 -0
  40. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +53 -48
  41. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js.map +1 -1
  42. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.js +2 -2
  43. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.js.map +1 -1
  44. package/lib/esm/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.js +15 -11
  45. package/lib/esm/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.js.map +1 -1
  46. package/lib/esm/components/backoffice/layout/breadcrumb/buildBreadcrumbs.js +50 -23
  47. package/lib/esm/components/backoffice/layout/breadcrumb/buildBreadcrumbs.js.map +1 -1
  48. package/lib/esm/components/backoffice/layout/buildSidebarSections.js +69 -69
  49. package/lib/esm/components/backoffice/layout/sidebarUtils.js +16 -16
  50. package/lib/esm/components/backoffice/layout/sidebarUtils.js.map +1 -1
  51. package/lib/esm/components/backoffice/links/BackofficeInlineLink.js +29 -0
  52. package/lib/esm/components/backoffice/links/BackofficeInlineLink.js.map +1 -0
  53. package/lib/esm/components/backoffice/links/BackofficeLink.js +21 -0
  54. package/lib/esm/components/backoffice/links/BackofficeLink.js.map +1 -0
  55. package/lib/esm/components/backoffice/links/BackofficeLinkContent.js +26 -0
  56. package/lib/esm/components/backoffice/links/BackofficeLinkContent.js.map +1 -0
  57. package/lib/esm/components/backoffice/links/BackofficeLinkLabel.js +19 -0
  58. package/lib/esm/components/backoffice/links/BackofficeLinkLabel.js.map +1 -0
  59. package/lib/esm/components/backoffice/links/backofficeLink.css.js +7 -0
  60. package/lib/esm/components/backoffice/links/backofficeLink.css.js.map +1 -0
  61. package/lib/esm/components/backoffice/links/resolveBackofficeLink.js +81 -0
  62. package/lib/esm/components/backoffice/links/resolveBackofficeLink.js.map +1 -0
  63. package/lib/esm/components/backoffice/links/resolveBackofficeTargetIcon.js +50 -0
  64. package/lib/esm/components/backoffice/links/resolveBackofficeTargetIcon.js.map +1 -0
  65. package/lib/esm/components/backoffice/links/types.js +0 -0
  66. package/lib/esm/components/backoffice/links/useBackofficeLink.js +21 -0
  67. package/lib/esm/components/backoffice/links/useBackofficeLink.js.map +1 -0
  68. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +1 -0
  69. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +1 -1
  70. package/lib/esm/components/backoffice/refs/BackofficeEntityIdRef.js +27 -27
  71. package/lib/esm/components/backoffice/refs/BackofficeEntityIdRef.js.map +1 -1
  72. package/lib/esm/components/backoffice/refs/BackofficeEntityLink.js +24 -21
  73. package/lib/esm/components/backoffice/refs/BackofficeEntityLink.js.map +1 -1
  74. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js +45 -44
  75. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js.map +1 -1
  76. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +269 -223
  77. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -1
  78. package/lib/esm/components/backoffice/shared/BackofficeFilterableCell.js +25 -30
  79. package/lib/esm/components/backoffice/shared/BackofficeFilterableCell.js.map +1 -1
  80. package/lib/esm/i18n/locales/en/backofficeReact.js +8 -0
  81. package/lib/esm/i18n/locales/en/backofficeReact.js.map +1 -1
  82. package/lib/esm/i18n/locales/fr/backofficeReact.js +8 -0
  83. package/lib/esm/i18n/locales/fr/backofficeReact.js.map +1 -1
  84. package/lib/esm/index.js +88 -73
  85. package/lib/esm/pages/BackofficeDashboardPage.js +1 -5
  86. package/lib/esm/pages/BackofficeDashboardPage.js.map +1 -1
  87. package/lib/esm/pages/BackofficeEntityDetailPage.js +231 -222
  88. package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -1
  89. package/lib/esm/pages/BackofficeEntityDetailPage.view-helpers.js +170 -54
  90. package/lib/esm/pages/BackofficeEntityDetailPage.view-helpers.js.map +1 -1
  91. package/lib/esm/pages/BackofficeEntityListPage.js +196 -207
  92. package/lib/esm/pages/BackofficeEntityListPage.js.map +1 -1
  93. package/lib/esm/pages/BackofficeHubPage.js +21 -21
  94. package/lib/esm/pages/BackofficeLayoutPage.js +7 -7
  95. package/lib/esm/pages/BackofficeLayoutPage.js.map +1 -1
  96. package/lib/esm/router/createBackofficeRoutes.js +132 -126
  97. package/lib/esm/router/createBackofficeRoutes.js.map +1 -1
  98. package/lib/esm/style.css +1 -1
  99. package/lib/types/auth/login/EmailCapturePanel.d.ts.map +1 -1
  100. package/lib/types/auth/login/MfaChallengeForm.d.ts.map +1 -1
  101. package/lib/types/auth/login/PasskeyLoginForm.d.ts.map +1 -1
  102. package/lib/types/auth/pages/AcceptInvitationScreen.d.ts.map +1 -1
  103. package/lib/types/auth/pages/PasswordResetCompleteScreen.d.ts.map +1 -1
  104. package/lib/types/auth/pages/PasswordResetRequestScreen.d.ts.map +1 -1
  105. package/lib/types/components/backoffice/actions/BackofficeEntityActionFormDialog.d.ts.map +1 -1
  106. package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts +0 -1
  107. package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts.map +1 -1
  108. package/lib/types/components/backoffice/detail/BackofficeCopyButton.d.ts +8 -0
  109. package/lib/types/components/backoffice/detail/BackofficeCopyButton.d.ts.map +1 -0
  110. package/lib/types/components/backoffice/detail/BackofficeDetailActionBar.d.ts +9 -0
  111. package/lib/types/components/backoffice/detail/BackofficeDetailActionBar.d.ts.map +1 -0
  112. package/lib/types/components/backoffice/detail/BackofficeDetailBlock.d.ts +7 -0
  113. package/lib/types/components/backoffice/detail/BackofficeDetailBlock.d.ts.map +1 -0
  114. package/lib/types/components/backoffice/detail/BackofficeDetailHeader.d.ts +12 -0
  115. package/lib/types/components/backoffice/detail/BackofficeDetailHeader.d.ts.map +1 -0
  116. package/lib/types/components/backoffice/detail/BackofficeDetailPage.d.ts +16 -0
  117. package/lib/types/components/backoffice/detail/BackofficeDetailPage.d.ts.map +1 -0
  118. package/lib/types/components/backoffice/detail/BackofficeDetailPage.stories.d.ts +11 -0
  119. package/lib/types/components/backoffice/detail/BackofficeDetailPage.stories.d.ts.map +1 -0
  120. package/lib/types/components/backoffice/detail/BackofficeDetailRelationLink.d.ts.map +1 -1
  121. package/lib/types/components/backoffice/detail/BackofficeDetailRelationListBlock.d.ts.map +1 -1
  122. package/lib/types/components/backoffice/detail/BackofficeDetailTable.d.ts +6 -0
  123. package/lib/types/components/backoffice/detail/BackofficeDetailTable.d.ts.map +1 -0
  124. package/lib/types/components/backoffice/detail/BackofficeEmptyValue.d.ts +7 -0
  125. package/lib/types/components/backoffice/detail/BackofficeEmptyValue.d.ts.map +1 -0
  126. package/lib/types/components/backoffice/detail/BackofficeStatusGroup.d.ts +8 -0
  127. package/lib/types/components/backoffice/detail/BackofficeStatusGroup.d.ts.map +1 -0
  128. package/lib/types/components/backoffice/detail/BackofficeTechnicalFacts.d.ts +2 -0
  129. package/lib/types/components/backoffice/detail/BackofficeTechnicalFacts.d.ts.map +1 -0
  130. package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.d.ts.map +1 -1
  131. package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.d.ts +1 -0
  132. package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.d.ts.map +1 -1
  133. package/lib/types/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.d.ts.map +1 -1
  134. package/lib/types/components/backoffice/layout/breadcrumb/buildBreadcrumbs.d.ts +10 -8
  135. package/lib/types/components/backoffice/layout/breadcrumb/buildBreadcrumbs.d.ts.map +1 -1
  136. package/lib/types/components/backoffice/layout/breadcrumb/types.d.ts +10 -5
  137. package/lib/types/components/backoffice/layout/breadcrumb/types.d.ts.map +1 -1
  138. package/lib/types/components/backoffice/layout/sidebarUtils.d.ts +6 -2
  139. package/lib/types/components/backoffice/layout/sidebarUtils.d.ts.map +1 -1
  140. package/lib/types/components/backoffice/links/BackofficeInlineLink.d.ts +18 -0
  141. package/lib/types/components/backoffice/links/BackofficeInlineLink.d.ts.map +1 -0
  142. package/lib/types/components/backoffice/links/BackofficeLink.d.ts +13 -0
  143. package/lib/types/components/backoffice/links/BackofficeLink.d.ts.map +1 -0
  144. package/lib/types/components/backoffice/links/BackofficeLinkContent.d.ts +10 -0
  145. package/lib/types/components/backoffice/links/BackofficeLinkContent.d.ts.map +1 -0
  146. package/lib/types/components/backoffice/links/BackofficeLinkLabel.d.ts +12 -0
  147. package/lib/types/components/backoffice/links/BackofficeLinkLabel.d.ts.map +1 -0
  148. package/lib/types/components/backoffice/links/backofficeLink.css.d.ts +4 -0
  149. package/lib/types/components/backoffice/links/backofficeLink.css.d.ts.map +1 -0
  150. package/lib/types/components/backoffice/links/resolveBackofficeLink.d.ts +15 -0
  151. package/lib/types/components/backoffice/links/resolveBackofficeLink.d.ts.map +1 -0
  152. package/lib/types/components/backoffice/links/resolveBackofficeTargetIcon.d.ts +8 -0
  153. package/lib/types/components/backoffice/links/resolveBackofficeTargetIcon.d.ts.map +1 -0
  154. package/lib/types/components/backoffice/links/types.d.ts +45 -0
  155. package/lib/types/components/backoffice/links/types.d.ts.map +1 -0
  156. package/lib/types/components/backoffice/links/useBackofficeLink.d.ts +7 -0
  157. package/lib/types/components/backoffice/links/useBackofficeLink.d.ts.map +1 -0
  158. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts.map +1 -1
  159. package/lib/types/components/backoffice/refs/BackofficeEntityLink.d.ts.map +1 -1
  160. package/lib/types/components/backoffice/refs/BackofficeRelatedCountLink.d.ts.map +1 -1
  161. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
  162. package/lib/types/components/backoffice/shared/BackofficeFilterableCell.d.ts +6 -3
  163. package/lib/types/components/backoffice/shared/BackofficeFilterableCell.d.ts.map +1 -1
  164. package/lib/types/i18n/resources.d.ts +16 -0
  165. package/lib/types/i18n/resources.d.ts.map +1 -1
  166. package/lib/types/index.d.ts +24 -1
  167. package/lib/types/index.d.ts.map +1 -1
  168. package/lib/types/pages/BackofficeDashboardPage.d.ts.map +1 -1
  169. package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -1
  170. package/lib/types/pages/BackofficeEntityDetailPage.view-helpers.d.ts +49 -22
  171. package/lib/types/pages/BackofficeEntityDetailPage.view-helpers.d.ts.map +1 -1
  172. package/lib/types/pages/BackofficeEntityListPage.d.ts.map +1 -1
  173. package/lib/types/provider/types.d.ts +26 -22
  174. package/lib/types/provider/types.d.ts.map +1 -1
  175. package/lib/types/router/createBackofficeRoutes.d.ts +36 -1
  176. package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -1
  177. package/package.json +7 -7
@@ -0,0 +1,26 @@
1
+ import { content as e, label as t } from "./backofficeLink.css.js";
2
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
3
+ //#region src/components/backoffice/links/BackofficeLinkContent.tsx
4
+ var i = ({ icon: i, label: a, showIcon: o = !0, endAdornment: s }) => /* @__PURE__ */ r("span", {
5
+ className: e,
6
+ children: [
7
+ o && i != null && /* @__PURE__ */ n("span", {
8
+ className: "_1ev5hus0 txvbqb9jg txvbqbcp txvbqbdoy txvbqbv69",
9
+ "aria-hidden": "true",
10
+ children: /* @__PURE__ */ n(i, {
11
+ width: 14,
12
+ height: 14,
13
+ "aria-hidden": "true"
14
+ })
15
+ }),
16
+ /* @__PURE__ */ n("span", {
17
+ className: t,
18
+ children: a
19
+ }),
20
+ s
21
+ ]
22
+ });
23
+ //#endregion
24
+ export { i as BackofficeLinkContent };
25
+
26
+ //# sourceMappingURL=BackofficeLinkContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackofficeLinkContent.js","names":[],"sources":["../../../../../src/components/backoffice/links/BackofficeLinkContent.tsx"],"sourcesContent":["import { type JSX, type ReactNode } from 'react';\n\nimport type { BackofficeIconComponent } from '../../../provider/types.js';\nimport * as styles from './backofficeLink.css.js';\n\nexport type BackofficeLinkContentProps = {\n icon?: BackofficeIconComponent;\n label: ReactNode;\n showIcon?: boolean;\n endAdornment?: ReactNode;\n};\n\nexport const BackofficeLinkContent = ({\n icon: Icon,\n label,\n showIcon = true,\n endAdornment,\n}: BackofficeLinkContentProps): JSX.Element => {\n return (\n <span className={styles.content}>\n {showIcon && Icon != null && (\n <span className={styles.icon} aria-hidden=\"true\">\n <Icon width={14} height={14} aria-hidden=\"true\" />\n </span>\n )}\n <span className={styles.label}>{label}</span>\n {endAdornment}\n </span>\n );\n};\n"],"mappings":";;;AAYA,IAAa,KAAyB,EACpC,MAAM,GACN,OAAA,GACA,cAAW,IACX,sBAGE,kBAAC,QAAD;CAAM,WAAW;WAAjB;EACG,KAAY,KAAQ,QACnB,kBAAC,QAAD;GAAM,WAAW;GAAa,eAAY;aACxC,kBAAC,GAAD;IAAM,OAAO;IAAI,QAAQ;IAAI,eAAY;IAAS,CAAA;GAC7C,CAAA;EAET,kBAAC,QAAD;GAAM,WAAW;aAAe;GAAa,CAAA;EAC5C;EACI"}
@@ -0,0 +1,19 @@
1
+ import { BackofficeLinkContent as e } from "./BackofficeLinkContent.js";
2
+ import { useBackofficeLink as t } from "./useBackofficeLink.js";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ //#region src/components/backoffice/links/BackofficeLinkLabel.tsx
5
+ var r = ({ target: r, label: i, className: a, icon: o = "auto" }) => {
6
+ let s = t(r, { label: i });
7
+ return /* @__PURE__ */ n("span", {
8
+ className: a,
9
+ children: /* @__PURE__ */ n(e, {
10
+ icon: s.icon,
11
+ label: s.label,
12
+ showIcon: o === "auto"
13
+ })
14
+ });
15
+ };
16
+ //#endregion
17
+ export { r as BackofficeLinkLabel, r as default };
18
+
19
+ //# sourceMappingURL=BackofficeLinkLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackofficeLinkLabel.js","names":[],"sources":["../../../../../src/components/backoffice/links/BackofficeLinkLabel.tsx"],"sourcesContent":["import { type JSX, type ReactNode } from 'react';\n\nimport type { BackofficeEntityManifestMap } from '@plumile/backoffice-core/types.js';\n\nimport { BackofficeLinkContent } from './BackofficeLinkContent.js';\nimport type { BackofficeLinkTarget } from './types.js';\nimport { useBackofficeLink } from './useBackofficeLink.js';\n\nexport type BackofficeLinkLabelProps<\n TManifest extends BackofficeEntityManifestMap = BackofficeEntityManifestMap,\n> = {\n target: BackofficeLinkTarget<TManifest>;\n label?: ReactNode;\n className?: string;\n icon?: 'auto' | 'none';\n};\n\nexport const BackofficeLinkLabel = <\n TManifest extends BackofficeEntityManifestMap = BackofficeEntityManifestMap,\n>({\n target,\n label,\n className,\n icon = 'auto',\n}: BackofficeLinkLabelProps<TManifest>): JSX.Element => {\n const link = useBackofficeLink(target, { label });\n\n return (\n <span className={className}>\n <BackofficeLinkContent\n icon={link.icon}\n label={link.label}\n showIcon={icon === 'auto'}\n />\n </span>\n );\n};\n\nexport default BackofficeLinkLabel;\n"],"mappings":";;;;AAiBA,IAAa,KAEX,EACA,WACA,UACA,cACA,UAAO,aAC+C;CACtD,IAAM,IAAO,EAAkB,GAAQ,EAAE,UAAO,CAAC;CAEjD,OACE,kBAAC,QAAD;EAAiB;YACf,kBAAC,GAAD;GACE,MAAM,EAAK;GACX,OAAO,EAAK;GACZ,UAAU,MAAS;GACnB,CAAA;EACG,CAAA"}
@@ -0,0 +1,7 @@
1
+ /* empty css */
2
+ //#region src/components/backoffice/links/backofficeLink.css.ts
3
+ var e = "txvbqb9jg txvbqbcp txvbqbany", t = "_1ev5hus0 txvbqb9jg txvbqbcp txvbqbdoy txvbqbv69", n = "_1ev5hus1";
4
+ //#endregion
5
+ export { e as content, t as icon, n as label };
6
+
7
+ //# sourceMappingURL=backofficeLink.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backofficeLink.css.js","names":[],"sources":["../../../../../src/components/backoffice/links/backofficeLink.css.ts"],"sourcesContent":["import { sprinkles } from '@plumile/ui';\nimport { style } from '@vanilla-extract/css';\n\nconst INLINE_FLEX = 'inline-flex' as const;\n\nexport const content = sprinkles({\n display: INLINE_FLEX,\n alignItems: 'center',\n gap: 1,\n});\n\nexport const icon = style([\n sprinkles({\n display: INLINE_FLEX,\n alignItems: 'center',\n justifyContent: 'center',\n color: 'current',\n }),\n {\n flex: '0 0 auto',\n width: '14px',\n height: '14px',\n },\n]);\n\nexport const label = style({\n minWidth: 0,\n});\n"],"mappings":""}
@@ -0,0 +1,81 @@
1
+ import { resolveSidebarHub as e } from "../layout/sidebarUtils.js";
2
+ import { resolveBackofficeTargetIcon as t } from "./resolveBackofficeTargetIcon.js";
3
+ import { buildBackofficeFallbackListHref as n } from "@plumile/backoffice-core/state/buildListHref.js";
4
+ //#region src/components/backoffice/links/resolveBackofficeLink.ts
5
+ var r = (e, t) => {
6
+ let n = e[t];
7
+ if (n == null) throw Error(`Unknown backoffice entity: ${t}`);
8
+ return n;
9
+ }, i = (t, n) => {
10
+ let r = t?.hubs?.[n];
11
+ if (r != null) return r.href;
12
+ for (let r of Object.values(t?.groups ?? {})) for (let i of r.items ?? []) if (i.kind === "hub" && i.id === n) return e(i, t).href;
13
+ throw Error(`Unknown backoffice hub: ${n}`);
14
+ }, a = (t, n, r) => {
15
+ let i = t?.hubs?.[n];
16
+ if (i != null) return i.title(r);
17
+ for (let i of Object.values(t?.groups ?? {})) for (let a of i.items ?? []) if (a.kind === "hub" && a.id === n) return e(a, t).title(r);
18
+ return n;
19
+ }, o = (e) => {
20
+ let o = e.manifest, s = e.sidebar, c = e.target, l = t({
21
+ target: e.target,
22
+ sidebar: e.sidebar
23
+ });
24
+ if (c.kind === "dashboard") return {
25
+ id: "dashboard",
26
+ href: e.dashboardHref ?? "/",
27
+ label: e.label ?? e.dashboardLabel ?? "Dashboard",
28
+ icon: l
29
+ };
30
+ if (c.kind === "entity-list") {
31
+ let t = r(o, c.entityId), { state: i } = c, a = t.routes.list;
32
+ return i != null && (a = n(t.routes.list, i.where ?? null, i.filters)), {
33
+ id: `${c.entityId}-list`,
34
+ href: a,
35
+ label: e.label ?? t.label(e.tApp),
36
+ icon: l
37
+ };
38
+ }
39
+ if (c.kind === "entity-detail") {
40
+ let t = r(o, c.entityId);
41
+ return {
42
+ id: `${c.entityId}-entity-${c.id}`,
43
+ href: t.routes.detail(c.id),
44
+ label: e.label ?? c.id,
45
+ icon: l
46
+ };
47
+ }
48
+ if (c.kind === "entity-detail-page") {
49
+ let t = r(o, c.entityId);
50
+ return {
51
+ id: `${c.entityId}-page-${c.id}-${c.pageId}`,
52
+ href: t.routes.detailPage(c.id, c.pageId),
53
+ label: e.label ?? c.pageId,
54
+ icon: l
55
+ };
56
+ }
57
+ if (c.kind === "tool") {
58
+ let t = r(o, c.toolId);
59
+ return {
60
+ id: `tool-${c.toolId}`,
61
+ href: t.routes.list,
62
+ label: e.label ?? t.label(e.tApp),
63
+ icon: l
64
+ };
65
+ }
66
+ return c.kind === "hub" ? {
67
+ id: `hub-${c.hubId}`,
68
+ href: i(s, c.hubId),
69
+ label: e.label ?? a(s, c.hubId, e.tApp),
70
+ icon: l
71
+ } : {
72
+ id: `href-${c.href}`,
73
+ href: c.href,
74
+ label: e.label ?? c.href,
75
+ icon: l
76
+ };
77
+ };
78
+ //#endregion
79
+ export { o as resolveBackofficeLink };
80
+
81
+ //# sourceMappingURL=resolveBackofficeLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveBackofficeLink.js","names":[],"sources":["../../../../../src/components/backoffice/links/resolveBackofficeLink.ts"],"sourcesContent":["import type { ReactNode } from 'react';\nimport type { TFunction } from 'i18next';\nimport { buildBackofficeFallbackListHref } from '@plumile/backoffice-core/state/buildListHref.js';\nimport type { BackofficeEntityManifestMap } from '@plumile/backoffice-core/types.js';\n\nimport type { BackofficeSidebarConfig } from '../../../provider/types.js';\nimport { resolveSidebarHub } from '../layout/sidebarUtils.js';\nimport { resolveBackofficeTargetIcon } from './resolveBackofficeTargetIcon.js';\nimport type { BackofficeLinkTarget, BackofficeResolvedLink } from './types.js';\n\nconst requireEntity = (\n manifest: BackofficeEntityManifestMap,\n entityId: string,\n) => {\n const entity = manifest[entityId];\n if (entity == null) {\n throw new Error(`Unknown backoffice entity: ${entityId}`);\n }\n return entity;\n};\n\nconst resolveHubHref = (\n sidebar: BackofficeSidebarConfig | undefined,\n hubId: string,\n): string => {\n const registeredHub = sidebar?.hubs?.[hubId];\n if (registeredHub != null) {\n return registeredHub.href;\n }\n\n for (const group of Object.values(sidebar?.groups ?? {})) {\n for (const item of group.items ?? []) {\n if (item.kind === 'hub' && item.id === hubId) {\n return resolveSidebarHub(item, sidebar).href;\n }\n }\n }\n\n throw new Error(`Unknown backoffice hub: ${hubId}`);\n};\n\nconst resolveHubLabel = (\n sidebar: BackofficeSidebarConfig | undefined,\n hubId: string,\n tApp: TFunction,\n): string => {\n const registeredHub = sidebar?.hubs?.[hubId];\n if (registeredHub != null) {\n return registeredHub.title(tApp);\n }\n\n for (const group of Object.values(sidebar?.groups ?? {})) {\n for (const item of group.items ?? []) {\n if (item.kind === 'hub' && item.id === hubId) {\n return resolveSidebarHub(item, sidebar).title(tApp);\n }\n }\n }\n\n return hubId;\n};\n\nexport const resolveBackofficeLink = <\n TManifest extends BackofficeEntityManifestMap,\n>(input: {\n target: BackofficeLinkTarget<TManifest>;\n label?: ReactNode;\n manifest: TManifest;\n sidebar?: BackofficeSidebarConfig<TManifest>;\n tApp: TFunction;\n dashboardHref?: string;\n dashboardLabel?: string;\n}): BackofficeResolvedLink => {\n const manifest = input.manifest as BackofficeEntityManifestMap;\n const sidebar = input.sidebar as BackofficeSidebarConfig | undefined;\n const target = input.target as BackofficeLinkTarget;\n const icon = resolveBackofficeTargetIcon({\n target: input.target,\n sidebar: input.sidebar,\n });\n\n if (target.kind === 'dashboard') {\n const href = input.dashboardHref ?? '/';\n return {\n id: 'dashboard',\n href,\n label: input.label ?? input.dashboardLabel ?? 'Dashboard',\n icon,\n };\n }\n\n if (target.kind === 'entity-list') {\n const entity = requireEntity(manifest, target.entityId);\n const { state } = target;\n let href = entity.routes.list;\n if (state != null) {\n href = buildBackofficeFallbackListHref(\n entity.routes.list,\n state.where ?? null,\n state.filters,\n );\n }\n return {\n id: `${target.entityId}-list`,\n href,\n label: input.label ?? entity.label(input.tApp),\n icon,\n };\n }\n\n if (target.kind === 'entity-detail') {\n const entity = requireEntity(manifest, target.entityId);\n return {\n id: `${target.entityId}-entity-${target.id}`,\n href: entity.routes.detail(target.id),\n label: input.label ?? target.id,\n icon,\n };\n }\n\n if (target.kind === 'entity-detail-page') {\n const entity = requireEntity(manifest, target.entityId);\n return {\n id: `${target.entityId}-page-${target.id}-${target.pageId}`,\n href: entity.routes.detailPage(target.id, target.pageId),\n label: input.label ?? target.pageId,\n icon,\n };\n }\n\n if (target.kind === 'tool') {\n const entity = requireEntity(manifest, target.toolId);\n return {\n id: `tool-${target.toolId}`,\n href: entity.routes.list,\n label: input.label ?? entity.label(input.tApp),\n icon,\n };\n }\n\n if (target.kind === 'hub') {\n return {\n id: `hub-${target.hubId}`,\n href: resolveHubHref(sidebar, target.hubId),\n label: input.label ?? resolveHubLabel(sidebar, target.hubId, input.tApp),\n icon,\n };\n }\n\n return {\n id: `href-${target.href}`,\n href: target.href,\n label: input.label ?? target.href,\n icon,\n };\n};\n"],"mappings":";;;;AAUA,IAAM,KACJ,GACA,MACG;CACH,IAAM,IAAS,EAAS;CACxB,IAAI,KAAU,MACZ,MAAU,MAAM,8BAA8B,IAAW;CAE3D,OAAO;GAGH,KACJ,GACA,MACW;CACX,IAAM,IAAgB,GAAS,OAAO;CACtC,IAAI,KAAiB,MACnB,OAAO,EAAc;CAGvB,KAAK,IAAM,KAAS,OAAO,OAAO,GAAS,UAAU,EAAE,CAAC,EACtD,KAAK,IAAM,KAAQ,EAAM,SAAS,EAAE,EAClC,IAAI,EAAK,SAAS,SAAS,EAAK,OAAO,GACrC,OAAO,EAAkB,GAAM,EAAQ,CAAC;CAK9C,MAAU,MAAM,2BAA2B,IAAQ;GAG/C,KACJ,GACA,GACA,MACW;CACX,IAAM,IAAgB,GAAS,OAAO;CACtC,IAAI,KAAiB,MACnB,OAAO,EAAc,MAAM,EAAK;CAGlC,KAAK,IAAM,KAAS,OAAO,OAAO,GAAS,UAAU,EAAE,CAAC,EACtD,KAAK,IAAM,KAAQ,EAAM,SAAS,EAAE,EAClC,IAAI,EAAK,SAAS,SAAS,EAAK,OAAO,GACrC,OAAO,EAAkB,GAAM,EAAQ,CAAC,MAAM,EAAK;CAKzD,OAAO;GAGI,KAEX,MAQ4B;CAC5B,IAAM,IAAW,EAAM,UACjB,IAAU,EAAM,SAChB,IAAS,EAAM,QACf,IAAO,EAA4B;EACvC,QAAQ,EAAM;EACd,SAAS,EAAM;EAChB,CAAC;CAEF,IAAI,EAAO,SAAS,aAElB,OAAO;EACL,IAAI;EACJ,MAHW,EAAM,iBAAiB;EAIlC,OAAO,EAAM,SAAS,EAAM,kBAAkB;EAC9C;EACD;CAGH,IAAI,EAAO,SAAS,eAAe;EACjC,IAAM,IAAS,EAAc,GAAU,EAAO,SAAS,EACjD,EAAE,aAAU,GACd,IAAO,EAAO,OAAO;EAQzB,OAPI,KAAS,SACX,IAAO,EACL,EAAO,OAAO,MACd,EAAM,SAAS,MACf,EAAM,QACP,GAEI;GACL,IAAI,GAAG,EAAO,SAAS;GACvB;GACA,OAAO,EAAM,SAAS,EAAO,MAAM,EAAM,KAAK;GAC9C;GACD;;CAGH,IAAI,EAAO,SAAS,iBAAiB;EACnC,IAAM,IAAS,EAAc,GAAU,EAAO,SAAS;EACvD,OAAO;GACL,IAAI,GAAG,EAAO,SAAS,UAAU,EAAO;GACxC,MAAM,EAAO,OAAO,OAAO,EAAO,GAAG;GACrC,OAAO,EAAM,SAAS,EAAO;GAC7B;GACD;;CAGH,IAAI,EAAO,SAAS,sBAAsB;EACxC,IAAM,IAAS,EAAc,GAAU,EAAO,SAAS;EACvD,OAAO;GACL,IAAI,GAAG,EAAO,SAAS,QAAQ,EAAO,GAAG,GAAG,EAAO;GACnD,MAAM,EAAO,OAAO,WAAW,EAAO,IAAI,EAAO,OAAO;GACxD,OAAO,EAAM,SAAS,EAAO;GAC7B;GACD;;CAGH,IAAI,EAAO,SAAS,QAAQ;EAC1B,IAAM,IAAS,EAAc,GAAU,EAAO,OAAO;EACrD,OAAO;GACL,IAAI,QAAQ,EAAO;GACnB,MAAM,EAAO,OAAO;GACpB,OAAO,EAAM,SAAS,EAAO,MAAM,EAAM,KAAK;GAC9C;GACD;;CAYH,OATI,EAAO,SAAS,QACX;EACL,IAAI,OAAO,EAAO;EAClB,MAAM,EAAe,GAAS,EAAO,MAAM;EAC3C,OAAO,EAAM,SAAS,EAAgB,GAAS,EAAO,OAAO,EAAM,KAAK;EACxE;EACD,GAGI;EACL,IAAI,QAAQ,EAAO;EACnB,MAAM,EAAO;EACb,OAAO,EAAM,SAAS,EAAO;EAC7B;EACD"}
@@ -0,0 +1,50 @@
1
+ import { resolveGroupItems as e, resolveSidebarHubFor as t } from "../layout/sidebarUtils.js";
2
+ //#region src/components/backoffice/links/resolveBackofficeTargetIcon.ts
3
+ var n = (e) => e.kind === "dashboard" ? {
4
+ kind: "dashboard",
5
+ id: "dashboard"
6
+ } : e.kind === "entity-list" || e.kind === "entity-detail" || e.kind === "entity-detail-page" ? {
7
+ kind: "entity",
8
+ id: e.entityId
9
+ } : e.kind === "tool" ? {
10
+ kind: "tool",
11
+ id: e.toolId
12
+ } : e.kind === "hub" ? {
13
+ kind: "hub",
14
+ id: e.hubId
15
+ } : {
16
+ kind: "href",
17
+ id: e.href
18
+ }, r = (e, n, r, i) => {
19
+ if (n.kind === "dashboard") return e.kind === "dashboard" && (e.id ?? "dashboard") === n.id ? e.icon ?? r.icon : void 0;
20
+ if (n.kind === "hub") {
21
+ if (e.kind === "hub" && e.id === n.id) {
22
+ let n = t(e, i);
23
+ return e.icon ?? n.icon ?? r.icon;
24
+ }
25
+ return;
26
+ }
27
+ if (n.kind === "entity" || n.kind === "tool") {
28
+ if (e.kind === n.kind && e.id === n.id) return e.icon ?? r.icon;
29
+ if (e.kind === "hub") {
30
+ let a = t(e, i);
31
+ for (let t of a.groups) {
32
+ let i = t.items.find((e) => e.kind === n.kind && e.id === n.id);
33
+ if (i != null) return i.icon ?? t.icon ?? e.icon ?? a.icon ?? r.icon;
34
+ }
35
+ }
36
+ }
37
+ }, i = (t) => {
38
+ let i = n(t.target);
39
+ if (i.kind !== "href") {
40
+ for (let n of Object.values(t.sidebar?.groups ?? {})) for (let a of e(n)) {
41
+ let e = r(a, i, n, t.sidebar);
42
+ if (e != null) return e;
43
+ }
44
+ if (i.kind === "hub") return t.sidebar?.hubs?.[i.id]?.icon;
45
+ }
46
+ };
47
+ //#endregion
48
+ export { i as resolveBackofficeTargetIcon };
49
+
50
+ //# sourceMappingURL=resolveBackofficeTargetIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveBackofficeTargetIcon.js","names":[],"sources":["../../../../../src/components/backoffice/links/resolveBackofficeTargetIcon.ts"],"sourcesContent":["import type { BackofficeEntityManifestMap } from '@plumile/backoffice-core/types.js';\n\nimport type {\n BackofficeIconComponent,\n BackofficeSidebarConfig,\n BackofficeSidebarGroupConfig,\n BackofficeSidebarItemConfig,\n} from '../../../provider/types.js';\nimport {\n resolveGroupItems,\n resolveSidebarHubFor,\n} from '../layout/sidebarUtils.js';\nimport type { BackofficeLinkTarget } from './types.js';\n\nconst getTargetId = (\n target: BackofficeLinkTarget,\n): { kind: 'dashboard' | 'entity' | 'tool' | 'hub' | 'href'; id: string } => {\n if (target.kind === 'dashboard') {\n return { kind: 'dashboard', id: 'dashboard' };\n }\n if (target.kind === 'entity-list') {\n return { kind: 'entity', id: target.entityId };\n }\n if (target.kind === 'entity-detail') {\n return { kind: 'entity', id: target.entityId };\n }\n if (target.kind === 'entity-detail-page') {\n return { kind: 'entity', id: target.entityId };\n }\n if (target.kind === 'tool') {\n return { kind: 'tool', id: target.toolId };\n }\n if (target.kind === 'hub') {\n return { kind: 'hub', id: target.hubId };\n }\n return { kind: 'href', id: target.href };\n};\n\nconst resolveItemIcon = <TManifest extends BackofficeEntityManifestMap>(\n item: BackofficeSidebarItemConfig<TManifest>,\n target: ReturnType<typeof getTargetId>,\n group: BackofficeSidebarGroupConfig<TManifest>,\n sidebar: BackofficeSidebarConfig<TManifest> | undefined,\n): BackofficeIconComponent | undefined => {\n if (target.kind === 'dashboard') {\n if (item.kind === 'dashboard' && (item.id ?? 'dashboard') === target.id) {\n return item.icon ?? group.icon;\n }\n return undefined;\n }\n\n if (target.kind === 'hub') {\n if (item.kind === 'hub' && item.id === target.id) {\n const hub = resolveSidebarHubFor(item, sidebar);\n return item.icon ?? hub.icon ?? group.icon;\n }\n return undefined;\n }\n\n if (target.kind === 'entity' || target.kind === 'tool') {\n if (item.kind === target.kind && item.id === target.id) {\n return item.icon ?? group.icon;\n }\n\n if (item.kind === 'hub') {\n const hub = resolveSidebarHubFor(item, sidebar);\n for (const hubGroup of hub.groups) {\n const hubItem = hubGroup.items.find((candidate) => {\n return candidate.kind === target.kind && candidate.id === target.id;\n });\n if (hubItem != null) {\n return (\n hubItem.icon ?? hubGroup.icon ?? item.icon ?? hub.icon ?? group.icon\n );\n }\n }\n }\n }\n\n return undefined;\n};\n\nexport const resolveBackofficeTargetIcon = <\n TManifest extends BackofficeEntityManifestMap,\n>(input: {\n target: BackofficeLinkTarget<TManifest>;\n sidebar?: BackofficeSidebarConfig<TManifest>;\n}): BackofficeIconComponent | undefined => {\n const target = getTargetId(input.target);\n if (target.kind === 'href') {\n return undefined;\n }\n\n for (const group of Object.values(input.sidebar?.groups ?? {})) {\n for (const item of resolveGroupItems(group)) {\n const icon = resolveItemIcon(item, target, group, input.sidebar);\n if (icon != null) {\n return icon;\n }\n }\n }\n\n if (target.kind === 'hub') {\n return input.sidebar?.hubs?.[target.id]?.icon;\n }\n\n return undefined;\n};\n"],"mappings":";;AAcA,IAAM,KACJ,MAEI,EAAO,SAAS,cACX;CAAE,MAAM;CAAa,IAAI;CAAa,GAE3C,EAAO,SAAS,iBAGhB,EAAO,SAAS,mBAGhB,EAAO,SAAS,uBACX;CAAE,MAAM;CAAU,IAAI,EAAO;CAAU,GAE5C,EAAO,SAAS,SACX;CAAE,MAAM;CAAQ,IAAI,EAAO;CAAQ,GAExC,EAAO,SAAS,QACX;CAAE,MAAM;CAAO,IAAI,EAAO;CAAO,GAEnC;CAAE,MAAM;CAAQ,IAAI,EAAO;CAAM,EAGpC,KACJ,GACA,GACA,GACA,MACwC;CACxC,IAAI,EAAO,SAAS,aAIlB,OAHI,EAAK,SAAS,gBAAgB,EAAK,MAAM,iBAAiB,EAAO,KAC5D,EAAK,QAAQ,EAAM,OAE5B;CAGF,IAAI,EAAO,SAAS,OAAO;EACzB,IAAI,EAAK,SAAS,SAAS,EAAK,OAAO,EAAO,IAAI;GAChD,IAAM,IAAM,EAAqB,GAAM,EAAQ;GAC/C,OAAO,EAAK,QAAQ,EAAI,QAAQ,EAAM;;EAExC;;CAGF,IAAI,EAAO,SAAS,YAAY,EAAO,SAAS,QAAQ;EACtD,IAAI,EAAK,SAAS,EAAO,QAAQ,EAAK,OAAO,EAAO,IAClD,OAAO,EAAK,QAAQ,EAAM;EAG5B,IAAI,EAAK,SAAS,OAAO;GACvB,IAAM,IAAM,EAAqB,GAAM,EAAQ;GAC/C,KAAK,IAAM,KAAY,EAAI,QAAQ;IACjC,IAAM,IAAU,EAAS,MAAM,MAAM,MAC5B,EAAU,SAAS,EAAO,QAAQ,EAAU,OAAO,EAAO,GACjE;IACF,IAAI,KAAW,MACb,OACE,EAAQ,QAAQ,EAAS,QAAQ,EAAK,QAAQ,EAAI,QAAQ,EAAM;;;;GAU/D,KAEX,MAGyC;CACzC,IAAM,IAAS,EAAY,EAAM,OAAO;CACpC,MAAO,SAAS,QAIpB;OAAK,IAAM,KAAS,OAAO,OAAO,EAAM,SAAS,UAAU,EAAE,CAAC,EAC5D,KAAK,IAAM,KAAQ,EAAkB,EAAM,EAAE;GAC3C,IAAM,IAAO,EAAgB,GAAM,GAAQ,GAAO,EAAM,QAAQ;GAChE,IAAI,KAAQ,MACV,OAAO;;EAKb,IAAI,EAAO,SAAS,OAClB,OAAO,EAAM,SAAS,OAAO,EAAO,KAAK"}
File without changes
@@ -0,0 +1,21 @@
1
+ import { useBackofficeConfig as e } from "../../../provider/BackofficeConfigContext.js";
2
+ import { useOptionalBackofficeTopbarPortalContext as t } from "../layout/breadcrumb/BackofficeTopbarPortalContext.js";
3
+ import { resolveBackofficeLink as n } from "./resolveBackofficeLink.js";
4
+ import { useTranslation as r } from "react-i18next";
5
+ //#region src/components/backoffice/links/useBackofficeLink.ts
6
+ var i = (i, a) => {
7
+ let { entityManifest: o, sidebar: s } = e(), c = t(), { t: l } = r();
8
+ return n({
9
+ target: i,
10
+ label: a?.label,
11
+ manifest: o,
12
+ sidebar: s,
13
+ tApp: l,
14
+ dashboardHref: c?.dashboardHref,
15
+ dashboardLabel: c?.dashboardLabel
16
+ });
17
+ };
18
+ //#endregion
19
+ export { i as useBackofficeLink };
20
+
21
+ //# sourceMappingURL=useBackofficeLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBackofficeLink.js","names":[],"sources":["../../../../../src/components/backoffice/links/useBackofficeLink.ts"],"sourcesContent":["import { type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { BackofficeEntityManifestMap } from '@plumile/backoffice-core/types.js';\n\nimport { useBackofficeConfig } from '../../../provider/BackofficeConfigContext.js';\nimport { useOptionalBackofficeTopbarPortalContext } from '../layout/breadcrumb/BackofficeTopbarPortalContext.js';\nimport { resolveBackofficeLink } from './resolveBackofficeLink.js';\nimport type { BackofficeLinkTarget, BackofficeResolvedLink } from './types.js';\n\nexport const useBackofficeLink = <\n TManifest extends BackofficeEntityManifestMap = BackofficeEntityManifestMap,\n>(\n target: BackofficeLinkTarget<TManifest>,\n options?: {\n label?: ReactNode;\n },\n): BackofficeResolvedLink => {\n const { entityManifest, sidebar } = useBackofficeConfig();\n const topbar = useOptionalBackofficeTopbarPortalContext();\n const { t: tApp } = useTranslation();\n\n return resolveBackofficeLink({\n target,\n label: options?.label,\n manifest: entityManifest,\n sidebar,\n tApp,\n dashboardHref: topbar?.dashboardHref,\n dashboardLabel: topbar?.dashboardLabel,\n });\n};\n"],"mappings":";;;;;AAUA,IAAa,KAGX,GACA,MAG2B;CAC3B,IAAM,EAAE,mBAAgB,eAAY,GAAqB,EACnD,IAAS,GAA0C,EACnD,EAAE,GAAG,MAAS,GAAgB;CAEpC,OAAO,EAAsB;EAC3B;EACA,OAAO,GAAS;EAChB,UAAU;EACV;EACA;EACA,eAAe,GAAQ;EACvB,gBAAgB,GAAQ;EACzB,CAAC"}
@@ -81,6 +81,7 @@ var { useFragment: S, useLazyLoadQuery: C } = x, w = "store-and-network", T = (e
81
81
  onClose: _,
82
82
  title: o,
83
83
  footer: P,
84
+ initialFocus: "first-form-control",
84
85
  children: /* @__PURE__ */ v(a, {
85
86
  search: C,
86
87
  onSearchChange: F,
@@ -1 +1 @@
1
- {"version":3,"file":"EntityIdPickerDialog.js","names":[],"sources":["../../../../../src/components/backoffice/pickers/EntityIdPickerDialog.tsx"],"sourcesContent":["import {\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useState,\n type JSX,\n} from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\n\nimport {\n BackofficeEmptyState,\n Button,\n InlineBanner,\n Modal,\n Spinner,\n} from '@plumile/ui';\nimport type {\n BackofficePickerScope,\n BackofficeRuntimeEntityPickerConfig,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\n\nimport { BackofficeErrorBoundary } from '../errors/BackofficeErrorBoundary.js';\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficePickerEntityLoader } from '../../../provider/useBackofficeEntityLoader.js';\n\nimport { EntityPickerShell } from './shared/EntityPickerShell.js';\nimport { EntityPickerList } from './shared/EntityPickerList.js';\nimport type { EntityPickerRowViewModel } from './types.js';\nimport * as styles from './entityIdPickerDialog.css.js';\n\nconst { useFragment, useLazyLoadQuery } = ReactRelay;\n\nexport type EntityIdPickerDialogProps = {\n isOpen: boolean;\n entity: string;\n title: string;\n scope?: BackofficePickerScope<Record<string, unknown>>;\n onClose: () => void;\n onSelectId: (id: string) => void;\n};\n\nconst PICKER_FETCH_POLICY = 'store-and-network' as const;\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\ntype PickerBodyProps = {\n config: BackofficeRuntimeEntityPickerConfig;\n search: string;\n scope?: BackofficePickerScope<Record<string, unknown>>;\n fetchKey: number;\n onSelectId: (id: string) => void;\n};\n\ntype RuntimePickerRow = {\n title: string;\n subtitle?: string | null | undefined;\n};\n\nconst PickerBody = ({\n config,\n search,\n scope,\n fetchKey,\n onSelectId,\n}: PickerBodyProps): JSX.Element => {\n const variables = useMemo(() => {\n const trimmed = search.trim();\n return config.buildQueryVariables({ search: trimmed, scope });\n }, [config, scope, search]);\n\n const queryData = useLazyLoadQuery(config.query, variables, {\n fetchPolicy: PICKER_FETCH_POLICY,\n fetchKey,\n });\n\n const fragmentData = useFragment(\n config.fragment,\n queryData as never,\n ) as unknown;\n\n const connection = config.getConnection(fragmentData);\n\n const items = useMemo<readonly EntityPickerRowViewModel[]>(() => {\n return connection.edges.map((edge) => {\n const row = config.toRow(edge.node) as RuntimePickerRow;\n const id = config.getRowId(row);\n return {\n id,\n title: row.title,\n subtitle: row.subtitle,\n };\n });\n }, [config, connection.edges]);\n\n return <EntityPickerList items={items} onSelectId={onSelectId} />;\n};\n\nconst buildFooter = (onClose: () => void, closeLabel: string): JSX.Element => {\n return (\n <>\n <Button type=\"button\" variant=\"secondary\" onClick={onClose}>\n {closeLabel}\n </Button>\n </>\n );\n};\n\nconst PickerUnavailable = ({ message }: { message: string }) => {\n return (\n <InlineBanner tone=\"warning\" title={message}>\n {null}\n </InlineBanner>\n );\n};\n\nconst PickerLoading = ({ label }: { label: string }): JSX.Element => {\n return (\n <div className={styles.loadingState} role=\"status\" aria-live=\"polite\">\n <Spinner size={18} ariaLabel={label} />\n <span className={styles.loadingLabel}>{label}</span>\n </div>\n );\n};\n\nexport const EntityIdPickerDialog = ({\n isOpen,\n entity,\n title,\n scope,\n onClose,\n onSelectId,\n}: EntityIdPickerDialogProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const [search, setSearch] = useState('');\n const [fetchKey, setFetchKey] = useState(0);\n const entityState = useBackofficePickerEntityLoader(entity, {\n enabled: isOpen,\n });\n\n let pickerConfig: BackofficeRuntimeEntityPickerConfig | undefined;\n if (entityState.status === 'loaded') {\n pickerConfig = entityState.module.config.picker as\n | BackofficeRuntimeEntityPickerConfig\n | undefined;\n }\n\n useEffect(() => {\n if (isOpen) {\n setSearch('');\n setFetchKey((value) => {\n return value + 1;\n });\n }\n }, [isOpen]);\n\n const footer = useMemo(() => {\n return buildFooter(onClose, t('common.actions.close'));\n }, [onClose, t]);\n\n const handleSearchChange = useCallback((next: string) => {\n setSearch(next);\n setFetchKey((value) => {\n return value + 1;\n });\n }, []);\n\n const handleSelectId = useCallback(\n (id: string) => {\n onSelectId(id);\n onClose();\n },\n [onClose, onSelectId],\n );\n\n if (!isOpen) {\n return null;\n }\n\n let resolvedSearchPlaceholder: string | undefined;\n if (pickerConfig?.searchPlaceholder != null) {\n resolvedSearchPlaceholder = resolveLabel(\n pickerConfig.searchPlaceholder,\n tApp,\n );\n }\n\n const trimmedSearch = search.trim();\n const isSearchRequired = pickerConfig?.searchRequired === true;\n\n let pickerNode: JSX.Element;\n if (entityState.status === 'loading') {\n pickerNode = <PickerLoading label={t('common.loading')} />;\n } else if (pickerConfig != null) {\n if (isSearchRequired && trimmedSearch === '') {\n pickerNode = <BackofficeEmptyState title={t('picker.searchRequired')} />;\n } else {\n pickerNode = (\n <PickerBody\n config={pickerConfig}\n search={search}\n scope={scope}\n fetchKey={fetchKey}\n onSelectId={handleSelectId}\n />\n );\n }\n } else {\n pickerNode = (\n <PickerUnavailable message={t('picker.unavailable', { entity })} />\n );\n }\n\n return (\n <Modal isOpen={isOpen} onClose={onClose} title={title} footer={footer}>\n <EntityPickerShell\n search={search}\n onSearchChange={handleSearchChange}\n searchPlaceholder={resolvedSearchPlaceholder}\n searchEnabled={pickerConfig?.searchEnabled ?? true}\n >\n <BackofficeErrorBoundary\n fallback={(args: { error: unknown; reset: () => void }) => {\n const { reset } = args;\n return (\n <InlineBanner\n tone=\"danger\"\n title={t('picker.errors.loadFailed')}\n actions={\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n reset();\n setFetchKey((value) => {\n return value + 1;\n });\n }}\n >\n {t('common.actions.retry')}\n </Button>\n }\n >\n {null}\n </InlineBanner>\n );\n }}\n >\n <Suspense fallback={<PickerLoading label={t('common.loading')} />}>\n {pickerNode}\n </Suspense>\n </BackofficeErrorBoundary>\n </EntityPickerShell>\n </Modal>\n );\n};\n\nexport type { BackofficePickerScope } from '@plumile/backoffice-core/types.js';\n\nexport default EntityIdPickerDialog;\n"],"mappings":"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"}
1
+ {"version":3,"file":"EntityIdPickerDialog.js","names":[],"sources":["../../../../../src/components/backoffice/pickers/EntityIdPickerDialog.tsx"],"sourcesContent":["import {\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useState,\n type JSX,\n} from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\n\nimport {\n BackofficeEmptyState,\n Button,\n InlineBanner,\n Modal,\n Spinner,\n} from '@plumile/ui';\nimport type {\n BackofficePickerScope,\n BackofficeRuntimeEntityPickerConfig,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\n\nimport { BackofficeErrorBoundary } from '../errors/BackofficeErrorBoundary.js';\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficePickerEntityLoader } from '../../../provider/useBackofficeEntityLoader.js';\n\nimport { EntityPickerShell } from './shared/EntityPickerShell.js';\nimport { EntityPickerList } from './shared/EntityPickerList.js';\nimport type { EntityPickerRowViewModel } from './types.js';\nimport * as styles from './entityIdPickerDialog.css.js';\n\nconst { useFragment, useLazyLoadQuery } = ReactRelay;\n\nexport type EntityIdPickerDialogProps = {\n isOpen: boolean;\n entity: string;\n title: string;\n scope?: BackofficePickerScope<Record<string, unknown>>;\n onClose: () => void;\n onSelectId: (id: string) => void;\n};\n\nconst PICKER_FETCH_POLICY = 'store-and-network' as const;\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\ntype PickerBodyProps = {\n config: BackofficeRuntimeEntityPickerConfig;\n search: string;\n scope?: BackofficePickerScope<Record<string, unknown>>;\n fetchKey: number;\n onSelectId: (id: string) => void;\n};\n\ntype RuntimePickerRow = {\n title: string;\n subtitle?: string | null | undefined;\n};\n\nconst PickerBody = ({\n config,\n search,\n scope,\n fetchKey,\n onSelectId,\n}: PickerBodyProps): JSX.Element => {\n const variables = useMemo(() => {\n const trimmed = search.trim();\n return config.buildQueryVariables({ search: trimmed, scope });\n }, [config, scope, search]);\n\n const queryData = useLazyLoadQuery(config.query, variables, {\n fetchPolicy: PICKER_FETCH_POLICY,\n fetchKey,\n });\n\n const fragmentData = useFragment(\n config.fragment,\n queryData as never,\n ) as unknown;\n\n const connection = config.getConnection(fragmentData);\n\n const items = useMemo<readonly EntityPickerRowViewModel[]>(() => {\n return connection.edges.map((edge) => {\n const row = config.toRow(edge.node) as RuntimePickerRow;\n const id = config.getRowId(row);\n return {\n id,\n title: row.title,\n subtitle: row.subtitle,\n };\n });\n }, [config, connection.edges]);\n\n return <EntityPickerList items={items} onSelectId={onSelectId} />;\n};\n\nconst buildFooter = (onClose: () => void, closeLabel: string): JSX.Element => {\n return (\n <>\n <Button type=\"button\" variant=\"secondary\" onClick={onClose}>\n {closeLabel}\n </Button>\n </>\n );\n};\n\nconst PickerUnavailable = ({ message }: { message: string }) => {\n return (\n <InlineBanner tone=\"warning\" title={message}>\n {null}\n </InlineBanner>\n );\n};\n\nconst PickerLoading = ({ label }: { label: string }): JSX.Element => {\n return (\n <div className={styles.loadingState} role=\"status\" aria-live=\"polite\">\n <Spinner size={18} ariaLabel={label} />\n <span className={styles.loadingLabel}>{label}</span>\n </div>\n );\n};\n\nexport const EntityIdPickerDialog = ({\n isOpen,\n entity,\n title,\n scope,\n onClose,\n onSelectId,\n}: EntityIdPickerDialogProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const [search, setSearch] = useState('');\n const [fetchKey, setFetchKey] = useState(0);\n const entityState = useBackofficePickerEntityLoader(entity, {\n enabled: isOpen,\n });\n\n let pickerConfig: BackofficeRuntimeEntityPickerConfig | undefined;\n if (entityState.status === 'loaded') {\n pickerConfig = entityState.module.config.picker as\n | BackofficeRuntimeEntityPickerConfig\n | undefined;\n }\n\n useEffect(() => {\n if (isOpen) {\n setSearch('');\n setFetchKey((value) => {\n return value + 1;\n });\n }\n }, [isOpen]);\n\n const footer = useMemo(() => {\n return buildFooter(onClose, t('common.actions.close'));\n }, [onClose, t]);\n\n const handleSearchChange = useCallback((next: string) => {\n setSearch(next);\n setFetchKey((value) => {\n return value + 1;\n });\n }, []);\n\n const handleSelectId = useCallback(\n (id: string) => {\n onSelectId(id);\n onClose();\n },\n [onClose, onSelectId],\n );\n\n if (!isOpen) {\n return null;\n }\n\n let resolvedSearchPlaceholder: string | undefined;\n if (pickerConfig?.searchPlaceholder != null) {\n resolvedSearchPlaceholder = resolveLabel(\n pickerConfig.searchPlaceholder,\n tApp,\n );\n }\n\n const trimmedSearch = search.trim();\n const isSearchRequired = pickerConfig?.searchRequired === true;\n\n let pickerNode: JSX.Element;\n if (entityState.status === 'loading') {\n pickerNode = <PickerLoading label={t('common.loading')} />;\n } else if (pickerConfig != null) {\n if (isSearchRequired && trimmedSearch === '') {\n pickerNode = <BackofficeEmptyState title={t('picker.searchRequired')} />;\n } else {\n pickerNode = (\n <PickerBody\n config={pickerConfig}\n search={search}\n scope={scope}\n fetchKey={fetchKey}\n onSelectId={handleSelectId}\n />\n );\n }\n } else {\n pickerNode = (\n <PickerUnavailable message={t('picker.unavailable', { entity })} />\n );\n }\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n footer={footer}\n initialFocus=\"first-form-control\"\n >\n <EntityPickerShell\n search={search}\n onSearchChange={handleSearchChange}\n searchPlaceholder={resolvedSearchPlaceholder}\n searchEnabled={pickerConfig?.searchEnabled ?? true}\n >\n <BackofficeErrorBoundary\n fallback={(args: { error: unknown; reset: () => void }) => {\n const { reset } = args;\n return (\n <InlineBanner\n tone=\"danger\"\n title={t('picker.errors.loadFailed')}\n actions={\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n reset();\n setFetchKey((value) => {\n return value + 1;\n });\n }}\n >\n {t('common.actions.retry')}\n </Button>\n }\n >\n {null}\n </InlineBanner>\n );\n }}\n >\n <Suspense fallback={<PickerLoading label={t('common.loading')} />}>\n {pickerNode}\n </Suspense>\n </BackofficeErrorBoundary>\n </EntityPickerShell>\n </Modal>\n );\n};\n\nexport type { BackofficePickerScope } from '@plumile/backoffice-core/types.js';\n\nexport default EntityIdPickerDialog;\n"],"mappings":"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"}
@@ -1,35 +1,35 @@
1
1
  import { useBackofficeReactTranslation as e } from "../../../i18n/useBackofficeReactTranslation.js";
2
- import { useBackofficeConfig as t } from "../../../provider/BackofficeConfigContext.js";
3
- import { BackofficeFilterAction as n } from "../filters/BackofficeFilterAction.js";
4
- import { BackofficeFilterableCell as r } from "../shared/BackofficeFilterableCell.js";
5
- import { jsx as i } from "react/jsx-runtime";
2
+ import { BackofficeFilterAction as t } from "../filters/BackofficeFilterAction.js";
3
+ import { BackofficeFilterableCell as n } from "../shared/BackofficeFilterableCell.js";
4
+ import { jsx as r } from "react/jsx-runtime";
6
5
  //#region src/components/backoffice/refs/BackofficeEntityIdRef.tsx
7
- var a = ({ id: a, entity: o, filterWhereKey: s, filterPath: c, filterLabel: l, listConfig: u }) => {
8
- let { entities: d } = t(), { t: f } = e(), p = "";
9
- if (typeof a == "string" && (p = a.trim()), p === "") return /* @__PURE__ */ i("span", { children: "-" });
10
- let m = null;
11
- if (o != null) {
12
- let e = d[o];
13
- e != null && (m = e.routes.detail(p));
14
- }
15
- let h = f("filters.placeholders.unresolved"), g;
16
- m != null && (g = h);
17
- let _ = null;
18
- return s != null && (_ = /* @__PURE__ */ i(n, {
19
- whereKey: s,
20
- value: p,
21
- path: c,
22
- label: l,
23
- listConfig: u
24
- })), /* @__PURE__ */ i(r, {
25
- filterAction: _,
26
- href: m,
27
- title: g,
6
+ var i = ({ id: i, entity: a, filterWhereKey: o, filterPath: s, filterLabel: c, listConfig: l }) => {
7
+ let { t: u } = e(), d = "";
8
+ if (typeof i == "string" && (d = i.trim()), d === "") return /* @__PURE__ */ r("span", { children: "-" });
9
+ let f;
10
+ a != null && (f = {
11
+ kind: "entity-detail",
12
+ entityId: a,
13
+ id: d
14
+ });
15
+ let p = u("filters.placeholders.unresolved"), m;
16
+ f != null && (m = p);
17
+ let h = null;
18
+ return o != null && (h = /* @__PURE__ */ r(t, {
19
+ whereKey: o,
20
+ value: d,
21
+ path: s,
22
+ label: c,
23
+ listConfig: l
24
+ })), /* @__PURE__ */ r(n, {
25
+ filterAction: h,
26
+ target: f,
27
+ title: m,
28
28
  openInNewTab: !0,
29
- children: h
29
+ children: p
30
30
  });
31
31
  };
32
32
  //#endregion
33
- export { a as BackofficeEntityIdRef, a as default };
33
+ export { i as BackofficeEntityIdRef, i as default };
34
34
 
35
35
  //# sourceMappingURL=BackofficeEntityIdRef.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityIdRef.js","names":[],"sources":["../../../../../src/components/backoffice/refs/BackofficeEntityIdRef.tsx"],"sourcesContent":["import { type JSX } from 'react';\nimport type { BackofficeRuntimeResolvedListFacetConfig } from '@plumile/backoffice-core/types.js';\nimport { useBackofficeConfig } from '../../../provider/BackofficeConfigContext.js';\nimport { BackofficeFilterAction } from '../filters/BackofficeFilterAction.js';\nimport { BackofficeFilterableCell } from '../shared/BackofficeFilterableCell.js';\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\n\nexport type BackofficeEntityIdRefProps = {\n id: string | null | undefined;\n entity?: string;\n filterWhereKey?: string;\n filterPath?: readonly string[];\n filterLabel?: string;\n listConfig?: BackofficeRuntimeResolvedListFacetConfig;\n};\n\nexport const BackofficeEntityIdRef = ({\n id,\n entity,\n filterWhereKey,\n filterPath,\n filterLabel,\n listConfig,\n}: BackofficeEntityIdRefProps): JSX.Element => {\n const { entities } = useBackofficeConfig();\n const { t } = useBackofficeReactTranslation();\n let resolvedId = '';\n if (typeof id === 'string') {\n resolvedId = id.trim();\n }\n if (resolvedId === '') {\n return <span>-</span>;\n }\n\n let detailTo: string | null = null;\n if (entity != null) {\n const config = entities[entity];\n if (config != null) {\n detailTo = config.routes.detail(resolvedId);\n }\n }\n\n const unresolvedLabel = t('filters.placeholders.unresolved');\n let title: string | undefined;\n if (detailTo != null) {\n title = unresolvedLabel;\n }\n let filterAction: JSX.Element | null = null;\n if (filterWhereKey != null) {\n filterAction = (\n <BackofficeFilterAction\n whereKey={filterWhereKey}\n value={resolvedId}\n path={filterPath}\n label={filterLabel}\n listConfig={listConfig}\n />\n );\n }\n\n return (\n <BackofficeFilterableCell\n filterAction={filterAction}\n href={detailTo}\n title={title}\n openInNewTab\n >\n {unresolvedLabel}\n </BackofficeFilterableCell>\n );\n};\n\nexport default BackofficeEntityIdRef;\n"],"mappings":";;;;;;AAgBA,IAAa,KAAyB,EACpC,OACA,WACA,mBACA,eACA,gBACA,oBAC6C;CAC7C,IAAM,EAAE,gBAAa,GAAqB,EACpC,EAAE,SAAM,GAA+B,EACzC,IAAa;CAIjB,IAHI,OAAO,KAAO,aAChB,IAAa,EAAG,MAAM,GAEpB,MAAe,IACjB,OAAO,kBAAC,QAAD,EAAA,UAAM,KAAQ,CAAA;CAGvB,IAAI,IAA0B;CAC9B,IAAI,KAAU,MAAM;EAClB,IAAM,IAAS,EAAS;EACxB,AAAI,KAAU,SACZ,IAAW,EAAO,OAAO,OAAO,EAAW;;CAI/C,IAAM,IAAkB,EAAE,kCAAkC,EACxD;CACJ,AAAI,KAAY,SACd,IAAQ;CAEV,IAAI,IAAmC;CAavC,OAZI,KAAkB,SACpB,IACE,kBAAC,GAAD;EACE,UAAU;EACV,OAAO;EACP,MAAM;EACN,OAAO;EACK;EACZ,CAAA,GAKJ,kBAAC,GAAD;EACgB;EACd,MAAM;EACC;EACP,cAAA;YAEC;EACwB,CAAA"}
1
+ {"version":3,"file":"BackofficeEntityIdRef.js","names":[],"sources":["../../../../../src/components/backoffice/refs/BackofficeEntityIdRef.tsx"],"sourcesContent":["import { type JSX } from 'react';\nimport type { BackofficeRuntimeResolvedListFacetConfig } from '@plumile/backoffice-core/types.js';\nimport { BackofficeFilterAction } from '../filters/BackofficeFilterAction.js';\nimport { BackofficeFilterableCell } from '../shared/BackofficeFilterableCell.js';\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport type { BackofficeLinkTarget } from '../links/types.js';\n\nexport type BackofficeEntityIdRefProps = {\n id: string | null | undefined;\n entity?: string;\n filterWhereKey?: string;\n filterPath?: readonly string[];\n filterLabel?: string;\n listConfig?: BackofficeRuntimeResolvedListFacetConfig;\n};\n\nexport const BackofficeEntityIdRef = ({\n id,\n entity,\n filterWhereKey,\n filterPath,\n filterLabel,\n listConfig,\n}: BackofficeEntityIdRefProps): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n let resolvedId = '';\n if (typeof id === 'string') {\n resolvedId = id.trim();\n }\n if (resolvedId === '') {\n return <span>-</span>;\n }\n\n let target: BackofficeLinkTarget | undefined;\n if (entity != null) {\n target = {\n kind: 'entity-detail',\n entityId: entity,\n id: resolvedId,\n };\n }\n\n const unresolvedLabel = t('filters.placeholders.unresolved');\n let title: string | undefined;\n if (target != null) {\n title = unresolvedLabel;\n }\n let filterAction: JSX.Element | null = null;\n if (filterWhereKey != null) {\n filterAction = (\n <BackofficeFilterAction\n whereKey={filterWhereKey}\n value={resolvedId}\n path={filterPath}\n label={filterLabel}\n listConfig={listConfig}\n />\n );\n }\n\n return (\n <BackofficeFilterableCell\n filterAction={filterAction}\n target={target}\n title={title}\n openInNewTab\n >\n {unresolvedLabel}\n </BackofficeFilterableCell>\n );\n};\n\nexport default BackofficeEntityIdRef;\n"],"mappings":";;;;;AAgBA,IAAa,KAAyB,EACpC,OACA,WACA,mBACA,eACA,gBACA,oBAC6C;CAC7C,IAAM,EAAE,SAAM,GAA+B,EACzC,IAAa;CAIjB,IAHI,OAAO,KAAO,aAChB,IAAa,EAAG,MAAM,GAEpB,MAAe,IACjB,OAAO,kBAAC,QAAD,EAAA,UAAM,KAAQ,CAAA;CAGvB,IAAI;CACJ,AAAI,KAAU,SACZ,IAAS;EACP,MAAM;EACN,UAAU;EACV,IAAI;EACL;CAGH,IAAM,IAAkB,EAAE,kCAAkC,EACxD;CACJ,AAAI,KAAU,SACZ,IAAQ;CAEV,IAAI,IAAmC;CAavC,OAZI,KAAkB,SACpB,IACE,kBAAC,GAAD;EACE,UAAU;EACV,OAAO;EACP,MAAM;EACN,OAAO;EACK;EACZ,CAAA,GAKJ,kBAAC,GAAD;EACgB;EACN;EACD;EACP,cAAA;YAEC;EACwB,CAAA"}
@@ -1,30 +1,33 @@
1
1
  import { useBackofficeReactTranslation as e } from "../../../i18n/useBackofficeReactTranslation.js";
2
- import { useBackofficeConfig as t } from "../../../provider/BackofficeConfigContext.js";
3
- import { BackofficeFilterAction as n } from "../filters/BackofficeFilterAction.js";
4
- import { BackofficeFilterableCell as r } from "../shared/BackofficeFilterableCell.js";
5
- import { jsx as i } from "react/jsx-runtime";
2
+ import { BackofficeFilterAction as t } from "../filters/BackofficeFilterAction.js";
3
+ import { BackofficeFilterableCell as n } from "../shared/BackofficeFilterableCell.js";
4
+ import { jsx as r } from "react/jsx-runtime";
6
5
  //#region src/components/backoffice/refs/BackofficeEntityLink.tsx
7
- var a = ({ id: a, label: o, entity: s, filterWhereKey: c, filterValue: l, filterPath: u, filterLabel: d, listConfig: f }) => {
8
- let { t: p } = e(), { entities: m } = t(), h = "";
9
- if (typeof a == "string" && (h = a.trim()), h === "") return /* @__PURE__ */ i("span", { children: p("common.notAvailable") });
10
- let g = null;
11
- c != null && (g = /* @__PURE__ */ i(n, {
12
- whereKey: c,
13
- value: l ?? h,
14
- path: u,
15
- label: d,
16
- listConfig: f
6
+ var i = ({ id: i, label: a, entity: o, filterWhereKey: s, filterValue: c, filterPath: l, filterLabel: u, listConfig: d }) => {
7
+ let { t: f } = e(), p = "";
8
+ if (typeof i == "string" && (p = i.trim()), p === "") return /* @__PURE__ */ r("span", { children: f("common.notAvailable") });
9
+ let m = null;
10
+ s != null && (m = /* @__PURE__ */ r(t, {
11
+ whereKey: s,
12
+ value: c ?? p,
13
+ path: l,
14
+ label: u,
15
+ listConfig: d
17
16
  }));
18
- let _ = m[s]?.routes.detail(h) ?? null, v = o ?? "";
19
- return v.trim() === "" && (v = p(_ == null ? "common.notAvailable" : "actions.view")), /* @__PURE__ */ i(r, {
20
- filterAction: g,
21
- href: _,
22
- title: v,
17
+ let h = {
18
+ kind: "entity-detail",
19
+ entityId: o,
20
+ id: p
21
+ }, g = a ?? "";
22
+ return g.trim() === "" && (g = f("actions.view")), /* @__PURE__ */ r(n, {
23
+ filterAction: m,
24
+ target: h,
25
+ title: g,
23
26
  openInNewTab: !0,
24
- children: v
27
+ children: g
25
28
  });
26
29
  };
27
30
  //#endregion
28
- export { a as BackofficeEntityLink, a as default };
31
+ export { i as BackofficeEntityLink, i as default };
29
32
 
30
33
  //# sourceMappingURL=BackofficeEntityLink.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityLink.js","names":[],"sources":["../../../../../src/components/backoffice/refs/BackofficeEntityLink.tsx"],"sourcesContent":["import { type JSX } from 'react';\n\nimport type { BackofficeRuntimeResolvedListFacetConfig } from '@plumile/backoffice-core/types.js';\n\nimport { useBackofficeConfig } from '../../../provider/BackofficeConfigContext.js';\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport { BackofficeFilterAction } from '../filters/BackofficeFilterAction.js';\nimport { BackofficeFilterableCell } from '../shared/BackofficeFilterableCell.js';\n\nexport type BackofficeEntityLinkProps = {\n id: string | null | undefined;\n label?: string | null | undefined;\n entity: string;\n filterWhereKey?: string;\n filterValue?: string;\n filterPath?: readonly string[];\n filterLabel?: string;\n listConfig?: BackofficeRuntimeResolvedListFacetConfig;\n};\n\nexport const BackofficeEntityLink = ({\n id,\n label,\n entity,\n filterWhereKey,\n filterValue,\n filterPath,\n filterLabel,\n listConfig,\n}: BackofficeEntityLinkProps): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n let resolvedId = '';\n if (typeof id === 'string') {\n resolvedId = id.trim();\n }\n if (resolvedId === '') {\n return <span>{t('common.notAvailable')}</span>;\n }\n\n let filterAction: JSX.Element | null = null;\n if (filterWhereKey != null) {\n const resolvedFilterValue = filterValue ?? resolvedId;\n filterAction = (\n <BackofficeFilterAction\n whereKey={filterWhereKey}\n value={resolvedFilterValue}\n path={filterPath}\n label={filterLabel}\n listConfig={listConfig}\n />\n );\n }\n\n const config = entities[entity];\n const detailTo = config?.routes.detail(resolvedId) ?? null;\n let resolvedLabel = label ?? '';\n if (resolvedLabel.trim() === '') {\n if (detailTo != null) {\n resolvedLabel = t('actions.view');\n } else {\n resolvedLabel = t('common.notAvailable');\n }\n }\n\n return (\n <BackofficeFilterableCell\n filterAction={filterAction}\n href={detailTo}\n title={resolvedLabel}\n openInNewTab\n >\n {resolvedLabel}\n </BackofficeFilterableCell>\n );\n};\n\nexport default BackofficeEntityLink;\n"],"mappings":";;;;;;AAoBA,IAAa,KAAwB,EACnC,OACA,UACA,WACA,mBACA,gBACA,eACA,gBACA,oBAC4C;CAC5C,IAAM,EAAE,SAAM,GAA+B,EACvC,EAAE,gBAAa,GAAqB,EACtC,IAAa;CAIjB,IAHI,OAAO,KAAO,aAChB,IAAa,EAAG,MAAM,GAEpB,MAAe,IACjB,OAAO,kBAAC,QAAD,EAAA,UAAO,EAAE,sBAAsB,EAAQ,CAAA;CAGhD,IAAI,IAAmC;CACvC,AAAI,KAAkB,SAEpB,IACE,kBAAC,GAAD;EACE,UAAU;EACV,OAJwB,KAAe;EAKvC,MAAM;EACN,OAAO;EACK;EACZ,CAAA;CAKN,IAAM,IADS,EAAS,IACC,OAAO,OAAO,EAAW,IAAI,MAClD,IAAgB,KAAS;CAS7B,OARI,EAAc,MAAM,KAAK,OAC3B,AACE,IAEgB,EAHd,KAAY,OAGI,wBAFA,eAEsB,GAK1C,kBAAC,GAAD;EACgB;EACd,MAAM;EACN,OAAO;EACP,cAAA;YAEC;EACwB,CAAA"}
1
+ {"version":3,"file":"BackofficeEntityLink.js","names":[],"sources":["../../../../../src/components/backoffice/refs/BackofficeEntityLink.tsx"],"sourcesContent":["import { type JSX } from 'react';\nimport type { BackofficeRuntimeResolvedListFacetConfig } from '@plumile/backoffice-core/types.js';\n\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport type { BackofficeLinkTarget } from '../links/types.js';\nimport { BackofficeFilterAction } from '../filters/BackofficeFilterAction.js';\nimport { BackofficeFilterableCell } from '../shared/BackofficeFilterableCell.js';\n\nexport type BackofficeEntityLinkProps = {\n id: string | null | undefined;\n label?: string | null | undefined;\n entity: string;\n filterWhereKey?: string;\n filterValue?: string;\n filterPath?: readonly string[];\n filterLabel?: string;\n listConfig?: BackofficeRuntimeResolvedListFacetConfig;\n};\n\nexport const BackofficeEntityLink = ({\n id,\n label,\n entity,\n filterWhereKey,\n filterValue,\n filterPath,\n filterLabel,\n listConfig,\n}: BackofficeEntityLinkProps): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n let resolvedId = '';\n if (typeof id === 'string') {\n resolvedId = id.trim();\n }\n if (resolvedId === '') {\n return <span>{t('common.notAvailable')}</span>;\n }\n\n let filterAction: JSX.Element | null = null;\n if (filterWhereKey != null) {\n const resolvedFilterValue = filterValue ?? resolvedId;\n filterAction = (\n <BackofficeFilterAction\n whereKey={filterWhereKey}\n value={resolvedFilterValue}\n path={filterPath}\n label={filterLabel}\n listConfig={listConfig}\n />\n );\n }\n\n const target = {\n kind: 'entity-detail',\n entityId: entity,\n id: resolvedId,\n } as BackofficeLinkTarget;\n let resolvedLabel = label ?? '';\n if (resolvedLabel.trim() === '') {\n resolvedLabel = t('actions.view');\n }\n\n return (\n <BackofficeFilterableCell\n filterAction={filterAction}\n target={target}\n title={resolvedLabel}\n openInNewTab\n >\n {resolvedLabel}\n </BackofficeFilterableCell>\n );\n};\n\nexport default BackofficeEntityLink;\n"],"mappings":";;;;;AAmBA,IAAa,KAAwB,EACnC,OACA,UACA,WACA,mBACA,gBACA,eACA,gBACA,oBAC4C;CAC5C,IAAM,EAAE,SAAM,GAA+B,EACzC,IAAa;CAIjB,IAHI,OAAO,KAAO,aAChB,IAAa,EAAG,MAAM,GAEpB,MAAe,IACjB,OAAO,kBAAC,QAAD,EAAA,UAAO,EAAE,sBAAsB,EAAQ,CAAA;CAGhD,IAAI,IAAmC;CACvC,AAAI,KAAkB,SAEpB,IACE,kBAAC,GAAD;EACE,UAAU;EACV,OAJwB,KAAe;EAKvC,MAAM;EACN,OAAO;EACK;EACZ,CAAA;CAIN,IAAM,IAAS;EACb,MAAM;EACN,UAAU;EACV,IAAI;EACL,EACG,IAAgB,KAAS;CAK7B,OAJI,EAAc,MAAM,KAAK,OAC3B,IAAgB,EAAE,eAAe,GAIjC,kBAAC,GAAD;EACgB;EACN;EACR,OAAO;EACP,cAAA;YAEC;EACwB,CAAA"}
@@ -1,65 +1,66 @@
1
1
  import { useBackofficeReactTranslation as e } from "../../../i18n/useBackofficeReactTranslation.js";
2
2
  import { useBackofficeConfig as t } from "../../../provider/BackofficeConfigContext.js";
3
- import { count as n, icon as r, link as i } from "./backofficeRelatedCountLink.css.js";
4
- import { useContext as a } from "react";
5
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
6
- import { useTranslation as c } from "react-i18next";
7
- import { Link as l, RoutingContext as u } from "@plumile/router";
8
- import { buildBackofficeFallbackListHref as d, buildBackofficeListLink as f } from "@plumile/backoffice-core/state/buildListHref.js";
3
+ import { resolveBackofficeLink as n } from "../links/resolveBackofficeLink.js";
4
+ import { BackofficeInlineLink as r } from "../links/BackofficeInlineLink.js";
5
+ import { count as i, icon as a, link as o } from "./backofficeRelatedCountLink.css.js";
6
+ import { useContext as s } from "react";
7
+ import { jsx as c } from "react/jsx-runtime";
8
+ import { useTranslation as l } from "react-i18next";
9
+ import { RoutingContext as u } from "@plumile/router";
10
+ import { buildBackofficeListLink as d } from "@plumile/backoffice-core/state/buildListHref.js";
9
11
  //#region src/components/backoffice/refs/BackofficeRelatedCountLink.tsx
10
- var p = ({ count: p, entity: m, where: h }) => {
11
- let { t: g } = c(), { t: _ } = e(), { entities: v, entityRegistry: y } = t(), b = a(u), x = 0;
12
- typeof p == "number" && Number.isFinite(p) && (x = p);
13
- let S = v[m];
14
- if (S == null) return /* @__PURE__ */ o("span", { children: x });
15
- let C = _("relations.openFilteredList", { label: S.label(g) }), w = y.getLoadedListEntity(m), T;
16
- T = w == null ? d(S.routes.list, h) : f(w.config, { where: h });
17
- let E = async (e) => {
18
- let t = f((await y.loadListEntity(m)).config, { where: h }), n = "";
12
+ var f = ({ count: f, entity: p, where: m }) => {
13
+ let { t: h } = l(), { t: g } = e(), { entities: _, entityManifest: v, entityRegistry: y, sidebar: b } = t(), x = s(u), S = 0;
14
+ typeof f == "number" && Number.isFinite(f) && (S = f);
15
+ let C = _[p];
16
+ if (C == null) return /* @__PURE__ */ c("span", { children: S });
17
+ let w = g("relations.openFilteredList", { label: C.label(h) }), T = y.getLoadedListEntity(p), E = {
18
+ kind: "entity-list",
19
+ entityId: p,
20
+ state: { where: m }
21
+ }, D = async (e) => {
22
+ let t = d((await y.loadListEntity(p)).config, { where: m }), n = "";
19
23
  t.search !== "" && (n = `?${t.search}`), e.push({
20
24
  pathname: t.pathname,
21
25
  search: n,
22
26
  hash: ""
23
27
  });
24
28
  };
25
- return /* @__PURE__ */ s(l, {
26
- to: T,
27
- className: i,
28
- title: C,
29
- "aria-label": C,
29
+ return /* @__PURE__ */ c(r, {
30
+ target: E,
31
+ className: o,
32
+ title: w,
33
+ ariaLabel: w,
30
34
  onClick: (e) => {
31
- if (w != null || b == null || e.defaultPrevented || e.button !== 0 || e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return;
35
+ if (T != null || x == null || e.defaultPrevented || e.button !== 0 || e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return;
32
36
  e.preventDefault();
33
- let { history: t } = b;
34
- E(t).catch(() => {
35
- if (typeof T == "string") {
36
- let e = new URL(T, window.location.origin);
37
- t.push({
38
- pathname: e.pathname,
39
- search: e.search,
40
- hash: e.hash
41
- });
42
- return;
43
- }
44
- let e = "";
45
- T.search !== "" && (e = `?${T.search}`), t.push({
46
- pathname: T.pathname,
47
- search: e,
48
- hash: ""
37
+ let { history: t } = x;
38
+ D(t).catch(() => {
39
+ let e = n({
40
+ target: E,
41
+ manifest: v,
42
+ sidebar: b,
43
+ tApp: h
44
+ }), r = new URL(e.href, window.location.origin);
45
+ t.push({
46
+ pathname: r.pathname,
47
+ search: r.search,
48
+ hash: r.hash
49
49
  });
50
50
  });
51
51
  },
52
- children: [/* @__PURE__ */ o("span", {
53
- className: n,
54
- children: x
55
- }), /* @__PURE__ */ o("span", {
56
- className: r,
52
+ endAdornment: /* @__PURE__ */ c("span", {
53
+ className: a,
57
54
  "aria-hidden": "true",
58
55
  children: "›"
59
- })]
56
+ }),
57
+ children: /* @__PURE__ */ c("span", {
58
+ className: i,
59
+ children: S
60
+ })
60
61
  });
61
62
  };
62
63
  //#endregion
63
- export { p as BackofficeRelatedCountLink, p as default };
64
+ export { f as BackofficeRelatedCountLink, f as default };
64
65
 
65
66
  //# sourceMappingURL=BackofficeRelatedCountLink.js.map