@flowselections/layout-maker 1.8.0 → 1.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.
@@ -123,6 +123,44 @@ export async function bestaatHash(hash) {
123
123
  const { data } = await supabase.from("layout_logos").select("*").eq("hash", hash).maybeSingle();
124
124
  return data ?? null;
125
125
  }
126
+ export const OPSLAG_ONTBREEKT = `De logo-opslag ("${LOGO_BUCKET}") bestaat nog niet in deze shell. ` +
127
+ "Draai sql/print-schema.sql opnieuw in de Supabase-database van deze shell.";
128
+ /** Vertaalt technische opslagfouten naar begrijpelijke Nederlandse tekst. */
129
+ export function vertaalOpslagFout(e) {
130
+ const tekst = e instanceof Error ? e.message : String(e ?? "");
131
+ if (/bucket not found/i.test(tekst))
132
+ return new Error(OPSLAG_ONTBREEKT);
133
+ if (/row-level security|not authorized|403/i.test(tekst)) {
134
+ return new Error("Geen rechten op de logo-opslag. Draai sql/print-schema.sql opnieuw zodat de " +
135
+ "toegangsregels voor logo's zijn ingesteld.");
136
+ }
137
+ return e instanceof Error ? e : new Error("Opslagfout");
138
+ }
139
+ /**
140
+ * Controleert of de logo-opslag bestaat en bereikbaar is.
141
+ * Geeft `null` bij goed, anders een uitlegbare melding.
142
+ */
143
+ export async function controleerLogoOpslag() {
144
+ const { error } = await supabase.storage.from(LOGO_BUCKET).list("", { limit: 1 });
145
+ if (!error)
146
+ return null;
147
+ return vertaalOpslagFout(error).message;
148
+ }
149
+ export function useLogoOpslag() {
150
+ const [opslagFout, setOpslagFout] = useState(null);
151
+ const controleer = useCallback(async () => {
152
+ try {
153
+ setOpslagFout(await controleerLogoOpslag());
154
+ }
155
+ catch (e) {
156
+ setOpslagFout(vertaalOpslagFout(e).message);
157
+ }
158
+ }, []);
159
+ useEffect(() => {
160
+ void controleer();
161
+ }, [controleer]);
162
+ return { opslagFout, controleer };
163
+ }
126
164
  async function uploadBestand(file) {
127
165
  const ext = bestandstypeVan(file);
128
166
  const pad = `${crypto.randomUUID()}.${ext}`;
@@ -131,7 +169,7 @@ async function uploadBestand(file) {
131
169
  upsert: false,
132
170
  });
133
171
  if (error)
134
- throw error;
172
+ throw vertaalOpslagFout(error);
135
173
  return pad;
136
174
  }
137
175
  export async function maakLogo(input) {