@fayz-ai/saas 0.6.6 → 0.7.0
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.
- package/README.md +1 -1
- package/dist/hooks/useModuleNavigation.d.ts.map +1 -1
- package/dist/index.cjs +5 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/shell/hooks/useModuleNavigation.d.ts.map +1 -1
- package/package.json +8 -5
- package/src/hooks/useModuleNavigation.ts +7 -1
- package/src/shell/hooks/useModuleNavigation.ts +7 -1
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ This is where the Fayz pitch becomes a product. `@fayz-ai/saas` is the multi-ten
|
|
|
10
10
|
A salon and a clinic ship from the same engine — `@fayz-ai/saas` is the part that makes each one a real, isolated, billable tenant. Plugins snap in; this layer gives them an org to live in, a user to act as, and a shell to render through.
|
|
11
11
|
|
|
12
12
|
## What's inside
|
|
13
|
-
- **App factory** — `defineSaas`, `
|
|
13
|
+
- **App factory** — `defineSaas`, `AdminScaffold`, `AdminShell`, `LoginPage` (manifest-first admin entry)
|
|
14
14
|
- **CRUD engine** — `CrudPage`, `CrudListView`, `CrudFormPage`, `CrudDetailPage`, `CrudCardGrid`, `createCrudPage`, `ImportWizard`, `exportToCSV`
|
|
15
15
|
- **Org / multi-tenancy** — `createSupabaseOrgAdapter`, `createMockOrgAdapter`, `OrgProvider`, `useTenant`, `useOrganizationStore`
|
|
16
16
|
- **Permissions** — `PermissionsProvider`, `PermissionGate`, `usePermission`, `useHasPermission`, `usePermissions`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModuleNavigation.d.ts","sourceRoot":"","sources":["../../src/hooks/useModuleNavigation.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,CAAA;AAE7C;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAW7C;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,SAAY;;;;
|
|
1
|
+
{"version":3,"file":"useModuleNavigation.d.ts","sourceRoot":"","sources":["../../src/hooks/useModuleNavigation.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,CAAA;AAE7C;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAW7C;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,SAAY;;;;yBAmFrD,MAAM,SAAS,MAAM;;0BA8BpB,MAAM;EAWhD"}
|
package/dist/index.cjs
CHANGED
|
@@ -8859,13 +8859,17 @@ function useModuleNavigation(hashBase, depthMap, homeView = "summary") {
|
|
|
8859
8859
|
const rest = hash.slice(hashBase.length + 1);
|
|
8860
8860
|
const segments = rest.split("/");
|
|
8861
8861
|
if (segments.length === 1 && segments[0] === homeView) return homeView;
|
|
8862
|
-
const ACTION_KEYWORDS = ["edit", "detail", "view"];
|
|
8862
|
+
const ACTION_KEYWORDS = ["edit", "detail", "view", "post"];
|
|
8863
8863
|
if (segments.length >= 3) {
|
|
8864
8864
|
const maybeAction = segments[segments.length - 2];
|
|
8865
8865
|
if (ACTION_KEYWORDS.includes(maybeAction)) {
|
|
8866
8866
|
return segments.slice(0, -2).join("-") + "-" + maybeAction + ":" + segments[segments.length - 1];
|
|
8867
8867
|
}
|
|
8868
8868
|
}
|
|
8869
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
8870
|
+
if (segments.length >= 2 && UUID_RE.test(segments[segments.length - 1])) {
|
|
8871
|
+
return segments.slice(0, -1).join("-") + ":" + segments[segments.length - 1];
|
|
8872
|
+
}
|
|
8869
8873
|
return segments.join("-");
|
|
8870
8874
|
}
|
|
8871
8875
|
return homeView;
|