@fayz-ai/saas 0.6.6 → 0.8.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 +3 -1
- package/dist/app/admin-app.d.ts.map +1 -1
- package/dist/archetype-lookup.d.ts +1 -1
- package/dist/archetype-lookup.d.ts.map +1 -1
- package/dist/{chunk-DCRT47W4.js → chunk-3M25GRRU.js} +6 -10
- package/dist/chunk-3M25GRRU.js.map +1 -0
- package/dist/{chunk-SRIUD35R.cjs → chunk-IPWCHJPE.cjs} +5 -11
- package/dist/chunk-IPWCHJPE.cjs.map +1 -0
- package/dist/hooks/useModuleNavigation.d.ts.map +1 -1
- package/dist/index.cjs +76 -76
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -23
- package/dist/index.js.map +1 -1
- package/dist/lib/schedule-service.d.ts.map +1 -1
- package/dist/org/adapters/supabase.d.ts +9 -1
- package/dist/org/adapters/supabase.d.ts.map +1 -1
- package/dist/org/index.cjs +10 -10
- package/dist/org/index.js +1 -1
- package/dist/shell/components/settings/ConnectedUserProfile.d.ts.map +1 -1
- package/dist/shell/components/settings/LocationsCrudPage.d.ts.map +1 -1
- package/dist/shell/hooks/useModuleNavigation.d.ts.map +1 -1
- package/dist/shell/lib/create-client-orders-provider.d.ts.map +1 -1
- package/dist/shell/lib/supabase.d.ts +2 -1
- package/dist/shell/lib/supabase.d.ts.map +1 -1
- package/dist/shell/types/crud.d.ts +1 -1
- package/dist/shell/types/crud.d.ts.map +1 -1
- package/dist/supabase/client.d.ts +0 -4
- package/dist/supabase/client.d.ts.map +1 -1
- package/package.json +13 -7
- package/src/app/admin-app.tsx +9 -1
- package/src/archetype-lookup.ts +2 -5
- package/src/crud/archetypes/PersonPicker.tsx +6 -6
- package/src/crud/archetypes/SubjectDetailTabs.tsx +2 -2
- package/src/env.d.ts +15 -0
- package/src/hooks/useModuleNavigation.ts +7 -1
- package/src/index.ts +0 -2
- package/src/lib/schedule-service.ts +2 -1
- package/src/org/adapters/supabase.ts +15 -5
- package/src/shell/components/settings/ConnectedUserProfile.tsx +3 -6
- package/src/shell/components/settings/LocationsCrudPage.ts +0 -1
- package/src/shell/hooks/useModuleNavigation.ts +7 -1
- package/src/shell/lib/create-client-orders-provider.ts +2 -4
- package/src/shell/lib/org-adapters/supabase.ts +3 -3
- package/src/shell/lib/supabase.ts +5 -3
- package/src/shell/stores/theme.store.ts +1 -1
- package/src/shell/types/crud.ts +1 -1
- package/src/supabase/client.ts +0 -8
- package/dist/chunk-DCRT47W4.js.map +0 -1
- package/dist/chunk-SRIUD35R.cjs.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export { ClientOrdersTab } from './shell/components/crud/archetypes/ClientOrders
|
|
|
15
15
|
export { createClientOrdersProvider } from './shell/lib/create-client-orders-provider';
|
|
16
16
|
export { createArchetypeLookup } from './archetype-lookup';
|
|
17
17
|
export type { EntityLookup, EntityLookupResult, EntityLookupMap, ArchetypeType } from './archetype-lookup';
|
|
18
|
-
export { createFayzSupabaseClient, getFayzSupabaseClient, getFayzSupabaseClientOptional,
|
|
18
|
+
export { createFayzSupabaseClient, getFayzSupabaseClient, getFayzSupabaseClientOptional, } from './supabase/client';
|
|
19
19
|
export { createSupabaseOrgAdapter, createMockOrgAdapter, useOrganizationStore, getPersistedOrgId, OrgProvider, useTenant, useTenantOptional, useOrgAdapter, useOrgAdapterOptional, } from './org/index';
|
|
20
20
|
export type { SupabaseOrgAdapterConfig, OrgStore, OrgProviderProps, TenantContext, } from './org/index';
|
|
21
21
|
export { usePermissionsStore, PermissionsProvider, usePermission, useHasPermission, usePermissions, } from './permissions/index';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC/D,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAI7G,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,UAAU,IAAI,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAK3E,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AASvC,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,cAAc,IAAI,oBAAoB,GACvC,MAAM,QAAQ,CAAA;AACf,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAA;AACpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAA;AAKtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAK1G,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,6BAA6B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useOrganizationStore, createFayzSupabaseClient, OrgProvider, getFayzSupabaseClientOptional, createSupabaseOrgAdapter, createMockOrgAdapter,
|
|
2
|
-
export {
|
|
1
|
+
import { useOrganizationStore, createFayzSupabaseClient, OrgProvider, getFayzSupabaseClientOptional, createSupabaseOrgAdapter, createMockOrgAdapter, useOrgAdapterOptional, getFayzSupabaseClient } from './chunk-3M25GRRU.js';
|
|
2
|
+
export { OrgProvider, createFayzSupabaseClient, createMockOrgAdapter, createSupabaseOrgAdapter, getFayzSupabaseClient, getFayzSupabaseClientOptional, getPersistedOrgId, useOrgAdapter, useOrgAdapterOptional, useOrganizationStore, useTenant, useTenantOptional } from './chunk-3M25GRRU.js';
|
|
3
3
|
import { PermissionsProvider, usePermissionOptional, usePermissionsStore } from './chunk-XNWCGJYH.js';
|
|
4
4
|
export { PermissionsProvider, useHasPermission, usePermission, usePermissions, usePermissionsStore } from './chunk-XNWCGJYH.js';
|
|
5
5
|
import { useBillingStore } from './chunk-5GYQK5IW.js';
|
|
@@ -1045,7 +1045,7 @@ function buildTheme(base, overrides) {
|
|
|
1045
1045
|
}
|
|
1046
1046
|
};
|
|
1047
1047
|
}
|
|
1048
|
-
var STORE_KEY = "
|
|
1048
|
+
var STORE_KEY = "__fayz_theme_store__";
|
|
1049
1049
|
function createThemeStore() {
|
|
1050
1050
|
if (typeof window !== "undefined" && window[STORE_KEY]) {
|
|
1051
1051
|
return window[STORE_KEY];
|
|
@@ -1737,7 +1737,7 @@ function ConnectedUserProfile() {
|
|
|
1737
1737
|
const supabase = getFayzSupabaseClientOptional();
|
|
1738
1738
|
if (!user || !supabase) return;
|
|
1739
1739
|
let cancelled = false;
|
|
1740
|
-
void supabase.
|
|
1740
|
+
void supabase.from("profiles").select("full_name, avatar_url, email").eq("id", user.id).maybeSingle().then(({ data }) => {
|
|
1741
1741
|
if (!cancelled && data) setProfile(data);
|
|
1742
1742
|
});
|
|
1743
1743
|
return () => {
|
|
@@ -1748,7 +1748,7 @@ function ConnectedUserProfile() {
|
|
|
1748
1748
|
if (!user) return;
|
|
1749
1749
|
try {
|
|
1750
1750
|
const supabase = getFayzSupabaseClient();
|
|
1751
|
-
const { error: profileError } = await supabase.
|
|
1751
|
+
const { error: profileError } = await supabase.from("profiles").upsert({ id: user.id, full_name: data.fullName, email: user.email }, { onConflict: "id" });
|
|
1752
1752
|
if (profileError) throw profileError;
|
|
1753
1753
|
const { error: metaError } = await supabase.auth.updateUser({ data: { full_name: data.fullName } });
|
|
1754
1754
|
if (metaError) throw metaError;
|
|
@@ -1769,7 +1769,7 @@ function ConnectedUserProfile() {
|
|
|
1769
1769
|
if (uploadError) throw uploadError;
|
|
1770
1770
|
const { data: urlData } = supabase.storage.from("avatars").getPublicUrl(path);
|
|
1771
1771
|
const avatarUrl = urlData.publicUrl;
|
|
1772
|
-
const { error: profileError } = await supabase.
|
|
1772
|
+
const { error: profileError } = await supabase.from("profiles").upsert({ id: user.id, avatar_url: avatarUrl, email: user.email }, { onConflict: "id" });
|
|
1773
1773
|
if (profileError) throw profileError;
|
|
1774
1774
|
await supabase.auth.updateUser({ data: { avatar_url: avatarUrl } });
|
|
1775
1775
|
setUser({ ...user, avatarUrl });
|
|
@@ -3427,7 +3427,7 @@ function PersonPicker({
|
|
|
3427
3427
|
if (value && !selected) {
|
|
3428
3428
|
const supabase = getSupabaseClientOptional$1();
|
|
3429
3429
|
if (!supabase) return;
|
|
3430
|
-
supabase.
|
|
3430
|
+
supabase.from("people").select("id, name, email, phone, kind").eq("id", value).single().then(({ data }) => {
|
|
3431
3431
|
if (data) setSelected(data);
|
|
3432
3432
|
});
|
|
3433
3433
|
}
|
|
@@ -3451,7 +3451,7 @@ function PersonPicker({
|
|
|
3451
3451
|
try {
|
|
3452
3452
|
const supabase = getSupabaseClientOptional$1();
|
|
3453
3453
|
if (!supabase) return;
|
|
3454
|
-
const { data } = await supabase.
|
|
3454
|
+
const { data } = await supabase.from("people").select("id, name, email, phone, kind").eq("tenant_id", tenantId).ilike("name", `%${term}%`).limit(6);
|
|
3455
3455
|
setResults(data ?? []);
|
|
3456
3456
|
} finally {
|
|
3457
3457
|
setSearching(false);
|
|
@@ -3484,7 +3484,7 @@ function PersonPicker({
|
|
|
3484
3484
|
try {
|
|
3485
3485
|
const supabase = getSupabaseClientOptional$1();
|
|
3486
3486
|
if (!supabase) return;
|
|
3487
|
-
const { data, error } = await supabase.
|
|
3487
|
+
const { data, error } = await supabase.from("people").insert({
|
|
3488
3488
|
tenant_id: tenantId,
|
|
3489
3489
|
kind: personKind,
|
|
3490
3490
|
name: query.trim(),
|
|
@@ -4518,13 +4518,13 @@ function mapRow(row) {
|
|
|
4518
4518
|
return r;
|
|
4519
4519
|
}
|
|
4520
4520
|
async function getSchedules(assigneeId, kind = "working_hours") {
|
|
4521
|
-
const core =
|
|
4521
|
+
const core = getFayzSupabaseClient();
|
|
4522
4522
|
const { data, error } = await core.from("schedules").select("*").eq("kind", kind).eq("assignee_id", assigneeId).order("day_of_week").order("starts_at");
|
|
4523
4523
|
if (error) throw error;
|
|
4524
4524
|
return (data ?? []).map(mapRow);
|
|
4525
4525
|
}
|
|
4526
4526
|
async function replaceWeeklySchedules(assigneeId, week, kind = "working_hours") {
|
|
4527
|
-
const core =
|
|
4527
|
+
const core = getFayzSupabaseClient();
|
|
4528
4528
|
const tenantId = getTenantId();
|
|
4529
4529
|
const { error: delErr } = await core.from("schedules").delete().eq("assignee_id", assigneeId).eq("kind", kind).not("day_of_week", "is", null).is("specific_date", null);
|
|
4530
4530
|
if (delErr) throw delErr;
|
|
@@ -4562,7 +4562,7 @@ function eachDate(startDate, endDate) {
|
|
|
4562
4562
|
return dates;
|
|
4563
4563
|
}
|
|
4564
4564
|
async function saveException(input) {
|
|
4565
|
-
const core =
|
|
4565
|
+
const core = getFayzSupabaseClient();
|
|
4566
4566
|
const tenantId = getTenantId();
|
|
4567
4567
|
const kind = input.kind ?? "working_hours";
|
|
4568
4568
|
const dates = eachDate(input.startDate, input.endDate);
|
|
@@ -4615,7 +4615,7 @@ async function saveException(input) {
|
|
|
4615
4615
|
}
|
|
4616
4616
|
}
|
|
4617
4617
|
async function deleteException(assigneeId, startDate, endDate, kind = "working_hours") {
|
|
4618
|
-
const core =
|
|
4618
|
+
const core = getFayzSupabaseClient();
|
|
4619
4619
|
const dates = eachDate(startDate, endDate ?? startDate);
|
|
4620
4620
|
const { error } = await core.from("schedules").delete().eq("assignee_id", assigneeId).eq("kind", kind).in("specific_date", dates);
|
|
4621
4621
|
if (error) throw error;
|
|
@@ -5832,7 +5832,7 @@ function OwnerTab({ item }) {
|
|
|
5832
5832
|
setLoading(false);
|
|
5833
5833
|
return;
|
|
5834
5834
|
}
|
|
5835
|
-
supabase.
|
|
5835
|
+
supabase.from("people").select("*").eq("id", tutorId).single().then(({ data }) => {
|
|
5836
5836
|
setPerson(data);
|
|
5837
5837
|
setLoading(false);
|
|
5838
5838
|
}, () => setLoading(false));
|
|
@@ -7216,7 +7216,6 @@ var locationEntityDef = {
|
|
|
7216
7216
|
],
|
|
7217
7217
|
data: {
|
|
7218
7218
|
table: "locations",
|
|
7219
|
-
schema: "saas_core",
|
|
7220
7219
|
tenantScoped: true,
|
|
7221
7220
|
searchColumns: ["name", "city", "state"],
|
|
7222
7221
|
defaults: { kind: "branch" }
|
|
@@ -8001,7 +8000,12 @@ function resolveOrgAdapter(config, authAdapter) {
|
|
|
8001
8000
|
name: p.name,
|
|
8002
8001
|
description: p.description
|
|
8003
8002
|
}));
|
|
8004
|
-
if (strategy === "supabase")
|
|
8003
|
+
if (strategy === "supabase")
|
|
8004
|
+
return createSupabaseOrgAdapter({
|
|
8005
|
+
roles: declaredRoles,
|
|
8006
|
+
authAdapter,
|
|
8007
|
+
siteUrl: import.meta.env.VITE_APP_URL
|
|
8008
|
+
});
|
|
8005
8009
|
return createMockOrgAdapter(config.permissions?.defaultProfiles);
|
|
8006
8010
|
}
|
|
8007
8011
|
function buildI18nConfig(config) {
|
|
@@ -8437,7 +8441,7 @@ function createClientOrdersProvider() {
|
|
|
8437
8441
|
const supabase = getSupabaseClientOptional();
|
|
8438
8442
|
if (!supabase) return { data: [], total: 0 };
|
|
8439
8443
|
try {
|
|
8440
|
-
let qb = supabase.
|
|
8444
|
+
let qb = supabase.from("orders").select("id, kind, status, total, reference_number, notes, metadata, created_at", { count: "exact" }).eq("party_id", query.clientId);
|
|
8441
8445
|
if (query.stages && query.stages.length > 0) {
|
|
8442
8446
|
const allStages = query.stages.flatMap((s) => STAGE_FILTER_MAP[s] ?? [s]);
|
|
8443
8447
|
qb = qb.in("status", allStages);
|
|
@@ -8450,7 +8454,7 @@ function createClientOrdersProvider() {
|
|
|
8450
8454
|
const orderIds = (data ?? []).map((row) => row.id).filter(Boolean);
|
|
8451
8455
|
const bookingStartsByOrderId = /* @__PURE__ */ new Map();
|
|
8452
8456
|
if (orderIds.length > 0) {
|
|
8453
|
-
const { data: bookings } = await supabase.
|
|
8457
|
+
const { data: bookings } = await supabase.from("appointments").select("order_id, starts_at").in("order_id", orderIds);
|
|
8454
8458
|
for (const booking of bookings ?? []) {
|
|
8455
8459
|
if (booking.order_id && booking.starts_at && !bookingStartsByOrderId.has(booking.order_id)) {
|
|
8456
8460
|
bookingStartsByOrderId.set(booking.order_id, booking.starts_at);
|
|
@@ -8481,7 +8485,7 @@ function createClientOrdersProvider() {
|
|
|
8481
8485
|
};
|
|
8482
8486
|
}
|
|
8483
8487
|
var ARCHETYPE_DISPLAY = {
|
|
8484
|
-
person: { table: "
|
|
8488
|
+
person: { table: "people", labelField: "name", subtitleFields: ["phone"], groupField: "kind" },
|
|
8485
8489
|
product: { table: "products", labelField: "name", subtitleFields: ["sku", "description"], priceField: "price" },
|
|
8486
8490
|
service: { table: "services", labelField: "name", subtitleFields: ["duration_minutes", "description"], priceField: "price" },
|
|
8487
8491
|
location: { table: "locations", labelField: "name", subtitleFields: ["city", "address"], groupField: "kind" }
|
|
@@ -8520,7 +8524,7 @@ function createArchetypeLookup(config) {
|
|
|
8520
8524
|
async search(query) {
|
|
8521
8525
|
const supabase = getSupabaseClientOptional$1();
|
|
8522
8526
|
if (!supabase) return [];
|
|
8523
|
-
let qb = supabase.
|
|
8527
|
+
let qb = supabase.from(display.table).select("*").eq("is_active", true).order(display.labelField, { ascending: true }).limit(limit);
|
|
8524
8528
|
if (query) qb = qb.ilike(display.labelField, `%${query}%`);
|
|
8525
8529
|
qb = applyKindFilter(qb);
|
|
8526
8530
|
const { data } = await qb;
|
|
@@ -8531,7 +8535,7 @@ function createArchetypeLookup(config) {
|
|
|
8531
8535
|
async list() {
|
|
8532
8536
|
const supabase = getSupabaseClientOptional$1();
|
|
8533
8537
|
if (!supabase) return [];
|
|
8534
|
-
let qb = supabase.
|
|
8538
|
+
let qb = supabase.from(display.table).select("*").eq("is_active", true).order(display.labelField, { ascending: true }).limit(limit);
|
|
8535
8539
|
qb = applyKindFilter(qb);
|
|
8536
8540
|
const { data } = await qb;
|
|
8537
8541
|
return (data ?? []).map(
|
|
@@ -8541,7 +8545,7 @@ function createArchetypeLookup(config) {
|
|
|
8541
8545
|
async getById(id) {
|
|
8542
8546
|
const supabase = getSupabaseClientOptional$1();
|
|
8543
8547
|
if (!supabase) return null;
|
|
8544
|
-
const { data } = await supabase.
|
|
8548
|
+
const { data } = await supabase.from(display.table).select("*").eq("id", id).single();
|
|
8545
8549
|
return data ? toResult(data, display, config.kindLabels) : null;
|
|
8546
8550
|
}
|
|
8547
8551
|
};
|
|
@@ -8844,13 +8848,17 @@ function useModuleNavigation(hashBase, depthMap, homeView = "summary") {
|
|
|
8844
8848
|
const rest = hash.slice(hashBase.length + 1);
|
|
8845
8849
|
const segments = rest.split("/");
|
|
8846
8850
|
if (segments.length === 1 && segments[0] === homeView) return homeView;
|
|
8847
|
-
const ACTION_KEYWORDS = ["edit", "detail", "view"];
|
|
8851
|
+
const ACTION_KEYWORDS = ["edit", "detail", "view", "post"];
|
|
8848
8852
|
if (segments.length >= 3) {
|
|
8849
8853
|
const maybeAction = segments[segments.length - 2];
|
|
8850
8854
|
if (ACTION_KEYWORDS.includes(maybeAction)) {
|
|
8851
8855
|
return segments.slice(0, -2).join("-") + "-" + maybeAction + ":" + segments[segments.length - 1];
|
|
8852
8856
|
}
|
|
8853
8857
|
}
|
|
8858
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
8859
|
+
if (segments.length >= 2 && UUID_RE.test(segments[segments.length - 1])) {
|
|
8860
|
+
return segments.slice(0, -1).join("-") + ":" + segments[segments.length - 1];
|
|
8861
|
+
}
|
|
8854
8862
|
return segments.join("-");
|
|
8855
8863
|
}
|
|
8856
8864
|
return homeView;
|