@withpotter/lib 0.13.0-next.67 → 0.13.0-next.69

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.
@@ -22,18 +22,18 @@ function useNavDeps() {
22
22
  const moduleLabels = effectiveModuleLabels(settings);
23
23
  const hiddenModules = settings?.hiddenModules;
24
24
  const salesChannel = isSalesChannel(settings?.salesChannel) ? settings.salesChannel : null;
25
+ const enabledBehaviors = useMemo(
26
+ () => resolveEnabledBehaviors(settings, template),
27
+ [settings, template]
28
+ );
25
29
  const { coreNavigation } = usePlatformModules({
26
30
  template,
27
31
  dashboardState,
28
- enabledBehaviors: settings?.enabledBehaviors,
32
+ enabledBehaviors,
29
33
  hiddenModules,
30
34
  moduleLabels,
31
35
  moduleOrder: settings?.moduleOrder
32
36
  });
33
- const enabledBehaviors = useMemo(
34
- () => resolveEnabledBehaviors(settings, template),
35
- [settings, template]
36
- );
37
37
  const intentConfig = useIntentConfig();
38
38
  return useMemo(
39
39
  () => ({
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/use-nav-groups.ts"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { usePathname } from '@withpotter/lib/use-pathname';\nimport { effectiveModuleLabels } from './effective-module-labels';\nimport { useAuth } from '@withpotter/lib/auth-context';\nimport { useCurrentTemplate } from '@withpotter/lib/template-context';\nimport { usePlatformModules } from '@withpotter/lib/use-platform-modules';\nimport { useIntentConfig } from '@withpotter/lib/intents/use-intent-config';\nimport { usePermissions } from '@withpotter/lib/use-permissions';\nimport { resolveEnabledBehaviors } from '@withpotter/lib/resolve-enabled-behaviors';\nimport { isSalesChannel } from '@withpotter/hooks/use-sales-channel';\nimport { buildNavGroups } from '@withpotter/components/sidebar/build-nav-groups';\nimport {\n ACCOUNT_GROUPS,\n BUSINESS_GROUPS,\n type NavGroup,\n type NavItem,\n} from '@withpotter/components/sidebar/config';\nimport type { RouteRule } from '@withpotter/lib/route-permission';\nimport { businessItems, customizationItems } from '@withpotter/lib/navigation-groups';\n\n/**\n * The sidebar's own groups, for callers that need to know what the nav shows\n * without being the sidebar.\n *\n * The deps this builder wants are a fixed dozen, and assembling them was\n * already copied out once into the editor's jump targets. This is that\n * assembly, named — permissions, hidden modules, archetype collapsing and the\n * merchant's own module labels all arrive already applied, because they are\n * applied inside `buildNavGroups`.\n *\n * Calls `useIntentConfig`, which calls `useSearchParams`. A caller in a layout\n * needs a Suspense boundary above it or the whole route bails out of rendering.\n */\nfunction useNavDeps() {\n const { tenant } = useAuth();\n const { template, dashboardState } = useCurrentTemplate(tenant?.templateId);\n\n const settings = tenant?.settings as Record<string, unknown> | undefined;\n const moduleLabels = effectiveModuleLabels(settings);\n const hiddenModules = settings?.hiddenModules as string[] | undefined;\n const salesChannel = isSalesChannel(settings?.salesChannel)\n ? settings.salesChannel\n : null;\n\n const { coreNavigation } = usePlatformModules({\n template,\n dashboardState,\n enabledBehaviors: settings?.enabledBehaviors as string[] | undefined,\n hiddenModules,\n moduleLabels,\n moduleOrder: settings?.moduleOrder as string[] | undefined,\n });\n\n const enabledBehaviors = useMemo(\n () => resolveEnabledBehaviors(settings, template),\n [settings, template],\n );\n const intentConfig = useIntentConfig();\n\n return useMemo(\n () => ({\n hiddenModules,\n moduleLabels,\n enabledBehaviors,\n inPersonOnly: salesChannel === 'in_person',\n intentConfig,\n coreNavigation,\n template,\n }),\n [\n hiddenModules,\n moduleLabels,\n enabledBehaviors,\n salesChannel,\n intentConfig,\n coreNavigation,\n template,\n ],\n );\n}\n\nexport function useNavGroups(): NavGroup[] {\n const deps = useNavDeps();\n const { can, isOwner, loading: permissionsLoading } = usePermissions();\n\n return useMemo(\n () => buildNavGroups({ ...deps, isOwner, can, permissionsLoading }),\n [deps, isOwner, can, permissionsLoading],\n );\n}\n\n/**\n * Every destination this business has, with the grant each one asks for —\n * before anybody's permissions are applied to it.\n *\n * `useNavGroups` returns what THIS person may see, which cannot answer \"may\n * this person be here\": a row missing from their nav is missing for four\n * different reasons, and only one of them is permission. Built from the same\n * table with the filter switched off, so the sidebar and the page gate can\n * never drift into disagreeing about which grant a screen needs.\n */\nexport function useAllNavRoutes(): RouteRule[] {\n const deps = useNavDeps();\n\n return useMemo(() => {\n const groups = buildNavGroups({\n ...deps,\n isOwner: true,\n can: () => true,\n permissionsLoading: false,\n });\n\n const rules: RouteRule[] = [];\n const walk = (items: NavItem[]) => {\n for (const item of items) {\n if (item.href) {\n rules.push({\n href: item.href,\n requiredPermission: item.requiredPermission,\n });\n }\n if (item.children?.length) walk(item.children);\n }\n };\n\n for (const group of groups) {\n if (group.href) {\n rules.push({\n href: group.href,\n requiredPermission: group.requiredPermission,\n });\n }\n for (const section of group.sections ?? []) walk(section.items);\n walk(group.items ?? []);\n }\n return rules;\n }, [deps]);\n}\n\n/**\n * What the nav calls the row that owns this route.\n *\n * `resolveScreenTitle` answers this for the archetype rows, and answers nothing\n * for the rest — Analytics, Payments, Templates, Help and the settings tree are\n * platform rows that live in the spine rather than in an intent's nav. Those\n * are most of the 94 screens that sit on no page frame, so without this they\n * reach the tab with no name of their own.\n *\n * Deepest href wins, so /dashboard/settings/team is Team rather than the\n * Settings row above it.\n */\nexport function useNavScreenName(): string | undefined {\n const groups = useNavGroups();\n const pathname = usePathname();\n\n return useMemo(() => {\n const path = (pathname ?? '').replace(/\\/+$/, '');\n let best: { name: string; depth: number } | undefined;\n\n const consider = (name: string | undefined, href: string | undefined) => {\n if (!name || !href) return;\n const target = href.split('?')[0].replace(/\\/+$/, '');\n if (path !== target && !path.startsWith(`${target}/`)) return;\n if (!best || target.length > best.depth) {\n best = { name, depth: target.length };\n }\n };\n\n const walk = (items: NavItem[] | undefined) =>\n items?.forEach((item) => {\n consider(item.name, item.href);\n walk(item.children);\n });\n\n groups.forEach((group) => {\n consider(group.label, group.href);\n walk(group.items);\n group.sections?.forEach((section) => walk(section.items));\n });\n\n // The account and settings rail is a third list, and a static one — it\n // takes no deps and never varies by archetype, which is why it is a plain\n // constant rather than something the builder assembles. Workspaces, Account\n // and the settings sections are only reachable through it.\n [...ACCOUNT_GROUPS, ...BUSINESS_GROUPS].forEach((group) =>\n group.items.forEach((item) => {\n consider(item.name, item.href);\n // A collapsed row can own routes it does not link to — Team & permissions\n // owns /settings/roles, Shipping owns /settings/service-areas. The rail\n // already says so in order to keep itself highlighted, and that is the\n // same question the tab is asking.\n item.match?.forEach((href) => consider(item.name, href));\n }),\n );\n\n // And a fourth list, the one the Settings and Website hubs are built from.\n // Several screens are reachable only through a hub tile — the editor,\n // Templates, SEO, Payouts — so the sidebar never names them and they were\n // arriving at the tab anonymous. The tile that opens a screen is as good a\n // name for it as a sidebar row is, and it is already written down.\n [...customizationItems, ...businessItems].forEach((item) =>\n consider(item.name, item.href),\n );\n\n return best?.name;\n }, [groups, pathname]);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/use-nav-groups.ts"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { usePathname } from '@withpotter/lib/use-pathname';\nimport { effectiveModuleLabels } from './effective-module-labels';\nimport { useAuth } from '@withpotter/lib/auth-context';\nimport { useCurrentTemplate } from '@withpotter/lib/template-context';\nimport { usePlatformModules } from '@withpotter/lib/use-platform-modules';\nimport { useIntentConfig } from '@withpotter/lib/intents/use-intent-config';\nimport { usePermissions } from '@withpotter/lib/use-permissions';\nimport { resolveEnabledBehaviors } from '@withpotter/lib/resolve-enabled-behaviors';\nimport { isSalesChannel } from '@withpotter/hooks/use-sales-channel';\nimport { buildNavGroups } from '@withpotter/components/sidebar/build-nav-groups';\nimport {\n ACCOUNT_GROUPS,\n BUSINESS_GROUPS,\n type NavGroup,\n type NavItem,\n} from '@withpotter/components/sidebar/config';\nimport type { RouteRule } from '@withpotter/lib/route-permission';\nimport { businessItems, customizationItems } from '@withpotter/lib/navigation-groups';\n\n/**\n * The sidebar's own groups, for callers that need to know what the nav shows\n * without being the sidebar.\n *\n * The deps this builder wants are a fixed dozen, and assembling them was\n * already copied out once into the editor's jump targets. This is that\n * assembly, named — permissions, hidden modules, archetype collapsing and the\n * merchant's own module labels all arrive already applied, because they are\n * applied inside `buildNavGroups`.\n *\n * Calls `useIntentConfig`, which calls `useSearchParams`. A caller in a layout\n * needs a Suspense boundary above it or the whole route bails out of rendering.\n */\nfunction useNavDeps() {\n const { tenant } = useAuth();\n const { template, dashboardState } = useCurrentTemplate(tenant?.templateId);\n\n const settings = tenant?.settings as Record<string, unknown> | undefined;\n const moduleLabels = effectiveModuleLabels(settings);\n const hiddenModules = settings?.hiddenModules as string[] | undefined;\n const salesChannel = isSalesChannel(settings?.salesChannel)\n ? settings.salesChannel\n : null;\n\n // Resolved first: the core list gates its modules on these, and the raw\n // stored field knows nothing of the merchant's own switches.\n const enabledBehaviors = useMemo(\n () => resolveEnabledBehaviors(settings, template),\n [settings, template],\n );\n\n const { coreNavigation } = usePlatformModules({\n template,\n dashboardState,\n enabledBehaviors,\n hiddenModules,\n moduleLabels,\n moduleOrder: settings?.moduleOrder as string[] | undefined,\n });\n\n const intentConfig = useIntentConfig();\n\n return useMemo(\n () => ({\n hiddenModules,\n moduleLabels,\n enabledBehaviors,\n inPersonOnly: salesChannel === 'in_person',\n intentConfig,\n coreNavigation,\n template,\n }),\n [\n hiddenModules,\n moduleLabels,\n enabledBehaviors,\n salesChannel,\n intentConfig,\n coreNavigation,\n template,\n ],\n );\n}\n\nexport function useNavGroups(): NavGroup[] {\n const deps = useNavDeps();\n const { can, isOwner, loading: permissionsLoading } = usePermissions();\n\n return useMemo(\n () => buildNavGroups({ ...deps, isOwner, can, permissionsLoading }),\n [deps, isOwner, can, permissionsLoading],\n );\n}\n\n/**\n * Every destination this business has, with the grant each one asks for —\n * before anybody's permissions are applied to it.\n *\n * `useNavGroups` returns what THIS person may see, which cannot answer \"may\n * this person be here\": a row missing from their nav is missing for four\n * different reasons, and only one of them is permission. Built from the same\n * table with the filter switched off, so the sidebar and the page gate can\n * never drift into disagreeing about which grant a screen needs.\n */\nexport function useAllNavRoutes(): RouteRule[] {\n const deps = useNavDeps();\n\n return useMemo(() => {\n const groups = buildNavGroups({\n ...deps,\n isOwner: true,\n can: () => true,\n permissionsLoading: false,\n });\n\n const rules: RouteRule[] = [];\n const walk = (items: NavItem[]) => {\n for (const item of items) {\n if (item.href) {\n rules.push({\n href: item.href,\n requiredPermission: item.requiredPermission,\n });\n }\n if (item.children?.length) walk(item.children);\n }\n };\n\n for (const group of groups) {\n if (group.href) {\n rules.push({\n href: group.href,\n requiredPermission: group.requiredPermission,\n });\n }\n for (const section of group.sections ?? []) walk(section.items);\n walk(group.items ?? []);\n }\n return rules;\n }, [deps]);\n}\n\n/**\n * What the nav calls the row that owns this route.\n *\n * `resolveScreenTitle` answers this for the archetype rows, and answers nothing\n * for the rest — Analytics, Payments, Templates, Help and the settings tree are\n * platform rows that live in the spine rather than in an intent's nav. Those\n * are most of the 94 screens that sit on no page frame, so without this they\n * reach the tab with no name of their own.\n *\n * Deepest href wins, so /dashboard/settings/team is Team rather than the\n * Settings row above it.\n */\nexport function useNavScreenName(): string | undefined {\n const groups = useNavGroups();\n const pathname = usePathname();\n\n return useMemo(() => {\n const path = (pathname ?? '').replace(/\\/+$/, '');\n let best: { name: string; depth: number } | undefined;\n\n const consider = (name: string | undefined, href: string | undefined) => {\n if (!name || !href) return;\n const target = href.split('?')[0].replace(/\\/+$/, '');\n if (path !== target && !path.startsWith(`${target}/`)) return;\n if (!best || target.length > best.depth) {\n best = { name, depth: target.length };\n }\n };\n\n const walk = (items: NavItem[] | undefined) =>\n items?.forEach((item) => {\n consider(item.name, item.href);\n walk(item.children);\n });\n\n groups.forEach((group) => {\n consider(group.label, group.href);\n walk(group.items);\n group.sections?.forEach((section) => walk(section.items));\n });\n\n // The account and settings rail is a third list, and a static one — it\n // takes no deps and never varies by archetype, which is why it is a plain\n // constant rather than something the builder assembles. Workspaces, Account\n // and the settings sections are only reachable through it.\n [...ACCOUNT_GROUPS, ...BUSINESS_GROUPS].forEach((group) =>\n group.items.forEach((item) => {\n consider(item.name, item.href);\n // A collapsed row can own routes it does not link to — Team & permissions\n // owns /settings/roles, Shipping owns /settings/service-areas. The rail\n // already says so in order to keep itself highlighted, and that is the\n // same question the tab is asking.\n item.match?.forEach((href) => consider(item.name, href));\n }),\n );\n\n // And a fourth list, the one the Settings and Website hubs are built from.\n // Several screens are reachable only through a hub tile — the editor,\n // Templates, SEO, Payouts — so the sidebar never names them and they were\n // arriving at the tab anonymous. The tile that opens a screen is as good a\n // name for it as a sidebar row is, and it is already written down.\n [...customizationItems, ...businessItems].forEach((item) =>\n consider(item.name, item.href),\n );\n\n return best?.name;\n }, [groups, pathname]);\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@withpotter/lib",
3
- "version": "0.13.0-next.67",
3
+ "version": "0.13.0-next.69",
4
4
  "description": "Box dashboard foundation: API client, contexts, types, intent config, and utilities.",
5
5
  "license": "UNLICENSED",
6
6
  "sideEffects": false,