feat(db): mesh data model — meshes, members, invites, audit log
- pgSchema "mesh" with 4 tables isolating the peer mesh domain - Enums: visibility, transport, tier, role - audit_log is metadata-only (E2E encryption enforced at broker/client) - Cascade on mesh delete, soft-delete via archivedAt/revokedAt Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
12
apps/web/src/modules/common/i18n/actions.ts
Normal file
12
apps/web/src/modules/common/i18n/actions.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
"use server";
|
||||
|
||||
import { cookies } from "next/headers";
|
||||
|
||||
import { config } from "@turbostarter/i18n";
|
||||
|
||||
import type { Locale } from "@turbostarter/i18n";
|
||||
|
||||
export const setLocaleCookie = async (locale: Locale) => {
|
||||
const cookieStore = await cookies();
|
||||
cookieStore.set(config.cookie, locale);
|
||||
};
|
||||
35
apps/web/src/modules/common/i18n/controls.tsx
Normal file
35
apps/web/src/modules/common/i18n/controls.tsx
Normal file
@@ -0,0 +1,35 @@
|
||||
"use client";
|
||||
|
||||
import { usePathname, useRouter } from "next/navigation";
|
||||
import { useCallback } from "react";
|
||||
|
||||
import { getPathname } from "@turbostarter/i18n";
|
||||
import { LocaleCustomizer } from "@turbostarter/ui-web/i18n";
|
||||
|
||||
import { appConfig } from "~/config/app";
|
||||
|
||||
import { setLocaleCookie } from "./actions";
|
||||
|
||||
import type { Locale } from "@turbostarter/i18n";
|
||||
|
||||
export const I18nControls = () => {
|
||||
const router = useRouter();
|
||||
const path = usePathname();
|
||||
|
||||
const onChange = useCallback(
|
||||
async (locale: Locale) => {
|
||||
await setLocaleCookie(locale);
|
||||
router.push(
|
||||
getPathname({
|
||||
locale,
|
||||
path,
|
||||
defaultLocale: appConfig.locale,
|
||||
}),
|
||||
);
|
||||
router.refresh();
|
||||
},
|
||||
[path, router],
|
||||
);
|
||||
|
||||
return <LocaleCustomizer onChange={onChange} />;
|
||||
};
|
||||
Reference in New Issue
Block a user