@fayz-ai/saas 0.7.0 → 0.8.1
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 +2 -0
- 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/crud/CrudDetailPage.d.ts.map +1 -1
- package/dist/crud/CrudFormPage.d.ts.map +1 -1
- package/dist/index.cjs +84 -75
- 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 +40 -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/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 +2 -2
- 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 +10 -7
- package/src/app/admin-app.tsx +9 -1
- package/src/archetype-lookup.ts +2 -5
- package/src/crud/CrudDetailPage.tsx +3 -0
- package/src/crud/CrudFormPage.tsx +11 -0
- 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/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/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 +2 -2
- 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';
|
|
@@ -10,7 +10,7 @@ import { hashRouterAdapter, registerScaffold, registerEntity, deriveEntityKey, r
|
|
|
10
10
|
export { getActiveTenantId, getSupabaseClientOptional, renderApp, setCurrentLocale } from '@fayz-ai/core';
|
|
11
11
|
import { AuthProvider, AuthGate, createAuthRuntime } from '@fayz-ai/plugin-auth';
|
|
12
12
|
export { LoginPage } from '@fayz-ai/plugin-auth';
|
|
13
|
-
import { ToastProvider, NavTransitionProvider, toast, Card, Button, cn, useLayoutStore, ModuleLayoutProvider, AppShell, PageTransition, Dropdown, DropdownTrigger, DropdownContent, DropdownItem, DataTable, Modal, ModalContent, ModalHeader, ModalTitle, ModalDescription, ModalFooter, ModalBody, createFayzTheme, Avatar, AvatarImage, AvatarFallback, DropdownLabel, DropdownSeparator, Badge, Skeleton, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, CardContent, CardTitle, CardDescription, CardHeader, Input, CardFooter, useSaveBar, useBackHandler, Checkbox, Breadcrumb, Separator, Tabs, TabsList, TabsTrigger, TabsContent, ListView, useModuleLayout, ICON_MAP as ICON_MAP$1, Popover, PopoverTrigger, PopoverContent, CurrencyInput, TooltipProvider, Tooltip, TooltipTrigger, TooltipContent, DatePicker, TimePicker } from '@fayz-ai/ui';
|
|
13
|
+
import { ToastProvider, NavTransitionProvider, toast, Card, Button, cn, useLayoutStore, ModuleLayoutProvider, AppShell, PageTransition, Dropdown, DropdownTrigger, DropdownContent, DropdownItem, DataTable, Modal, ModalContent, ModalHeader, ModalTitle, ModalDescription, ModalFooter, ModalBody, createFayzTheme, Avatar, AvatarImage, AvatarFallback, DropdownLabel, DropdownSeparator, Badge, Skeleton, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, CardContent, CardTitle, CardDescription, CardHeader, Input, CardFooter, useSaveBar, useBackHandler, Checkbox, Breadcrumb, Separator, Tabs, TabsList, TabsTrigger, TabsContent, ListView, useModuleLayout, ICON_MAP as ICON_MAP$1, Popover, PopoverTrigger, PopoverContent, MarkdownEditor, CurrencyInput, Markdown, TooltipProvider, Tooltip, TooltipTrigger, TooltipContent, DatePicker, TimePicker } from '@fayz-ai/ui';
|
|
14
14
|
export { createFayzTheme, fayzThemePresets } from '@fayz-ai/ui';
|
|
15
15
|
import * as LucideIcons4 from 'lucide-react';
|
|
16
16
|
import { X, MessageCircle, Settings2, ArrowUp, MoreVertical, Upload, Download, Pencil, BookOpen, Sparkles, Building2, User, Shield, Palette, ArrowLeft, Users, ShieldCheck, MapPin, SlidersHorizontal, Puzzle, Search, Loader2, Zap, UserX, UserPlus, UserCheck, TrendingUp, Star, Inbox, Clock3, Clock, Ban, Receipt, Landmark, Boxes, Box, FolderOpen, ListPlus, List, Plus, Filter, Contact, Handshake, Map as Map$1, UtensilsCrossed, Camera, Tags, Tag, Percent, Globe, BookOpenCheck, UserCog, Briefcase, ListChecks, ClipboardList, Wrench, Target, ShoppingBag, ShoppingCart, Megaphone, CircleDollarSign, BadgeDollarSign, DollarSign, Mail, FileCheck2, FileText, CalendarX, CalendarCheck2, BarChart3, Activity, Package, CalendarClock, Calendar, Bell, CreditCard, Settings, Home, Trash2, Check, FileSpreadsheet, ArrowRight, AlertCircle, ChevronDown, ChevronRight, MoreHorizontal, Eye, Copy, Save, KeyRound, ChevronsUpDown, RotateCcw, Edit, Route, MessageSquare, CalendarDays, ExternalLink, Phone, Cake, Plug, TableProperties, ChevronLeft, CircleCheckBig, CircleAlert, CircleEllipsis, CircleDashed, CheckCircle2, Power, ImagePlus, Truck, CalendarOff, CalendarPlus } from 'lucide-react';
|
|
@@ -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(),
|
|
@@ -3910,6 +3910,17 @@ function renderField(field, value, onChange, allValues = {}) {
|
|
|
3910
3910
|
className: `${baseClass} min-h-[60px] py-1.5`
|
|
3911
3911
|
}
|
|
3912
3912
|
);
|
|
3913
|
+
case "markdown":
|
|
3914
|
+
return /* @__PURE__ */ jsx(
|
|
3915
|
+
MarkdownEditor,
|
|
3916
|
+
{
|
|
3917
|
+
value: value ?? "",
|
|
3918
|
+
onChange,
|
|
3919
|
+
placeholder: field.placeholder,
|
|
3920
|
+
minRows: 12,
|
|
3921
|
+
defaultMode: "edit"
|
|
3922
|
+
}
|
|
3923
|
+
);
|
|
3913
3924
|
case "relation":
|
|
3914
3925
|
return /* @__PURE__ */ jsx(
|
|
3915
3926
|
RelationSelect,
|
|
@@ -4518,13 +4529,13 @@ function mapRow(row) {
|
|
|
4518
4529
|
return r;
|
|
4519
4530
|
}
|
|
4520
4531
|
async function getSchedules(assigneeId, kind = "working_hours") {
|
|
4521
|
-
const core =
|
|
4532
|
+
const core = getFayzSupabaseClient();
|
|
4522
4533
|
const { data, error } = await core.from("schedules").select("*").eq("kind", kind).eq("assignee_id", assigneeId).order("day_of_week").order("starts_at");
|
|
4523
4534
|
if (error) throw error;
|
|
4524
4535
|
return (data ?? []).map(mapRow);
|
|
4525
4536
|
}
|
|
4526
4537
|
async function replaceWeeklySchedules(assigneeId, week, kind = "working_hours") {
|
|
4527
|
-
const core =
|
|
4538
|
+
const core = getFayzSupabaseClient();
|
|
4528
4539
|
const tenantId = getTenantId();
|
|
4529
4540
|
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
4541
|
if (delErr) throw delErr;
|
|
@@ -4562,7 +4573,7 @@ function eachDate(startDate, endDate) {
|
|
|
4562
4573
|
return dates;
|
|
4563
4574
|
}
|
|
4564
4575
|
async function saveException(input) {
|
|
4565
|
-
const core =
|
|
4576
|
+
const core = getFayzSupabaseClient();
|
|
4566
4577
|
const tenantId = getTenantId();
|
|
4567
4578
|
const kind = input.kind ?? "working_hours";
|
|
4568
4579
|
const dates = eachDate(input.startDate, input.endDate);
|
|
@@ -4615,7 +4626,7 @@ async function saveException(input) {
|
|
|
4615
4626
|
}
|
|
4616
4627
|
}
|
|
4617
4628
|
async function deleteException(assigneeId, startDate, endDate, kind = "working_hours") {
|
|
4618
|
-
const core =
|
|
4629
|
+
const core = getFayzSupabaseClient();
|
|
4619
4630
|
const dates = eachDate(startDate, endDate ?? startDate);
|
|
4620
4631
|
const { error } = await core.from("schedules").delete().eq("assignee_id", assigneeId).eq("kind", kind).in("specific_date", dates);
|
|
4621
4632
|
if (error) throw error;
|
|
@@ -5832,7 +5843,7 @@ function OwnerTab({ item }) {
|
|
|
5832
5843
|
setLoading(false);
|
|
5833
5844
|
return;
|
|
5834
5845
|
}
|
|
5835
|
-
supabase.
|
|
5846
|
+
supabase.from("people").select("*").eq("id", tutorId).single().then(({ data }) => {
|
|
5836
5847
|
setPerson(data);
|
|
5837
5848
|
setLoading(false);
|
|
5838
5849
|
}, () => setLoading(false));
|
|
@@ -5940,6 +5951,8 @@ function formatValue2(field, value, t) {
|
|
|
5940
5951
|
return /* @__PURE__ */ jsx("a", { href: value, target: "_blank", rel: "noopener noreferrer", className: "text-primary hover:underline", children: value });
|
|
5941
5952
|
case "textarea":
|
|
5942
5953
|
return /* @__PURE__ */ jsx("p", { className: "whitespace-pre-wrap", children: value });
|
|
5954
|
+
case "markdown":
|
|
5955
|
+
return value ? /* @__PURE__ */ jsx(Markdown, { source: String(value) }) : null;
|
|
5943
5956
|
default:
|
|
5944
5957
|
return String(value);
|
|
5945
5958
|
}
|
|
@@ -7216,7 +7229,6 @@ var locationEntityDef = {
|
|
|
7216
7229
|
],
|
|
7217
7230
|
data: {
|
|
7218
7231
|
table: "locations",
|
|
7219
|
-
schema: "saas_core",
|
|
7220
7232
|
tenantScoped: true,
|
|
7221
7233
|
searchColumns: ["name", "city", "state"],
|
|
7222
7234
|
defaults: { kind: "branch" }
|
|
@@ -8001,7 +8013,12 @@ function resolveOrgAdapter(config, authAdapter) {
|
|
|
8001
8013
|
name: p.name,
|
|
8002
8014
|
description: p.description
|
|
8003
8015
|
}));
|
|
8004
|
-
if (strategy === "supabase")
|
|
8016
|
+
if (strategy === "supabase")
|
|
8017
|
+
return createSupabaseOrgAdapter({
|
|
8018
|
+
roles: declaredRoles,
|
|
8019
|
+
authAdapter,
|
|
8020
|
+
siteUrl: import.meta.env.VITE_APP_URL
|
|
8021
|
+
});
|
|
8005
8022
|
return createMockOrgAdapter(config.permissions?.defaultProfiles);
|
|
8006
8023
|
}
|
|
8007
8024
|
function buildI18nConfig(config) {
|
|
@@ -8437,7 +8454,7 @@ function createClientOrdersProvider() {
|
|
|
8437
8454
|
const supabase = getSupabaseClientOptional();
|
|
8438
8455
|
if (!supabase) return { data: [], total: 0 };
|
|
8439
8456
|
try {
|
|
8440
|
-
let qb = supabase.
|
|
8457
|
+
let qb = supabase.from("orders").select("id, kind, status, total, reference_number, notes, metadata, created_at", { count: "exact" }).eq("party_id", query.clientId);
|
|
8441
8458
|
if (query.stages && query.stages.length > 0) {
|
|
8442
8459
|
const allStages = query.stages.flatMap((s) => STAGE_FILTER_MAP[s] ?? [s]);
|
|
8443
8460
|
qb = qb.in("status", allStages);
|
|
@@ -8450,7 +8467,7 @@ function createClientOrdersProvider() {
|
|
|
8450
8467
|
const orderIds = (data ?? []).map((row) => row.id).filter(Boolean);
|
|
8451
8468
|
const bookingStartsByOrderId = /* @__PURE__ */ new Map();
|
|
8452
8469
|
if (orderIds.length > 0) {
|
|
8453
|
-
const { data: bookings } = await supabase.
|
|
8470
|
+
const { data: bookings } = await supabase.from("appointments").select("order_id, starts_at").in("order_id", orderIds);
|
|
8454
8471
|
for (const booking of bookings ?? []) {
|
|
8455
8472
|
if (booking.order_id && booking.starts_at && !bookingStartsByOrderId.has(booking.order_id)) {
|
|
8456
8473
|
bookingStartsByOrderId.set(booking.order_id, booking.starts_at);
|
|
@@ -8481,7 +8498,7 @@ function createClientOrdersProvider() {
|
|
|
8481
8498
|
};
|
|
8482
8499
|
}
|
|
8483
8500
|
var ARCHETYPE_DISPLAY = {
|
|
8484
|
-
person: { table: "
|
|
8501
|
+
person: { table: "people", labelField: "name", subtitleFields: ["phone"], groupField: "kind" },
|
|
8485
8502
|
product: { table: "products", labelField: "name", subtitleFields: ["sku", "description"], priceField: "price" },
|
|
8486
8503
|
service: { table: "services", labelField: "name", subtitleFields: ["duration_minutes", "description"], priceField: "price" },
|
|
8487
8504
|
location: { table: "locations", labelField: "name", subtitleFields: ["city", "address"], groupField: "kind" }
|
|
@@ -8520,7 +8537,7 @@ function createArchetypeLookup(config) {
|
|
|
8520
8537
|
async search(query) {
|
|
8521
8538
|
const supabase = getSupabaseClientOptional$1();
|
|
8522
8539
|
if (!supabase) return [];
|
|
8523
|
-
let qb = supabase.
|
|
8540
|
+
let qb = supabase.from(display.table).select("*").eq("is_active", true).order(display.labelField, { ascending: true }).limit(limit);
|
|
8524
8541
|
if (query) qb = qb.ilike(display.labelField, `%${query}%`);
|
|
8525
8542
|
qb = applyKindFilter(qb);
|
|
8526
8543
|
const { data } = await qb;
|
|
@@ -8531,7 +8548,7 @@ function createArchetypeLookup(config) {
|
|
|
8531
8548
|
async list() {
|
|
8532
8549
|
const supabase = getSupabaseClientOptional$1();
|
|
8533
8550
|
if (!supabase) return [];
|
|
8534
|
-
let qb = supabase.
|
|
8551
|
+
let qb = supabase.from(display.table).select("*").eq("is_active", true).order(display.labelField, { ascending: true }).limit(limit);
|
|
8535
8552
|
qb = applyKindFilter(qb);
|
|
8536
8553
|
const { data } = await qb;
|
|
8537
8554
|
return (data ?? []).map(
|
|
@@ -8541,7 +8558,7 @@ function createArchetypeLookup(config) {
|
|
|
8541
8558
|
async getById(id) {
|
|
8542
8559
|
const supabase = getSupabaseClientOptional$1();
|
|
8543
8560
|
if (!supabase) return null;
|
|
8544
|
-
const { data } = await supabase.
|
|
8561
|
+
const { data } = await supabase.from(display.table).select("*").eq("id", id).single();
|
|
8545
8562
|
return data ? toResult(data, display, config.kindLabels) : null;
|
|
8546
8563
|
}
|
|
8547
8564
|
};
|