Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/modules/access/fetchAuthState.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { verifySession } from "@/session";
import { createServerFn } from "@tanstack/react-start";
import { getUserLanguagesReadModel } from "../languages/read-models/getUserLanguagesReadModel";
import { LanguageReadModel } from "../languages/read-models/getAllLanguagesReadModel";
import { SystemRoleRaw } from "@/modules/users/types";
import { UserLanguageReadModel } from "../languages/read-models/getUserLanguagesReadModel";

export interface AuthState {
user?: { id: string; name: string };
Expand All @@ -14,7 +14,7 @@ export const fetchAuthState = createServerFn().handler(
async (): Promise<AuthState> => {
const session = await verifySession();

let languages: LanguageReadModel[] = [];
let languages: UserLanguageReadModel[] = [];
if (session) {
languages = await getUserLanguagesReadModel(session.user.id);
}
Expand Down
20 changes: 0 additions & 20 deletions src/modules/reporting/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,3 @@ export {
type BookProgressRow,
type BookProgressContributor,
} from "./read-models/getLanguageBookProgressReadModel";
export {
getLanguageDashboardBooksReadModel,
type LanguageDashboardBookReadModel,
} from "./read-models/getLanguageDashboardBooksReadModel";
export {
getLanguageDashboardMembersReadModel,
type LanguageDashboardMemberReadModel,
} from "./read-models/getLanguageDashboardMembersReadModel";
export {
getLanguageDashboardContributionsReadModel,
type LanguageDashboardContributionReadModel,
} from "./read-models/getLanguageDashboardContributionsReadModel";
export {
getLanguageDashboardActivityReadModel,
type LanguageDashboardActivityEntryReadModel,
} from "./read-models/getLanguageDashboardActivityReadModel";
export {
getLanguageApprovalActivityReadModel,
type LanguageApprovalActivityReadModel,
} from "./read-models/getLanguageApprovalActivityReadModel";
343 changes: 188 additions & 155 deletions src/routeTree.gen.ts

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions src/routes/_main/admin/__virtual.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import {
defineVirtualSubtreeConfig,
physical,
} from "@tanstack/virtual-file-routes";

export default defineVirtualSubtreeConfig([
physical("../../../ui/admin/routes"),
]);
Original file line number Diff line number Diff line change
@@ -1,44 +1,10 @@
import { Icon } from "@/components/Icon";
import { createPolicyMiddleware, Policy } from "@/modules/access";
import { importAIGlosses } from "../actions/importAIGlosses";
import { getAIGlossImportJobReadModel } from "../read-models/getAIGlossImportJobReadModel";
import { getAIGlossImportLanguagesReadModel } from "../read-models/getAIGlossImportLanguagesReadModel";
import { importAIGlosses } from "@/modules/translation/actions/importAIGlosses";
import JobStatusPoller from "@/shared/jobs/ui/JobStatusPoller";
import { JobStatus } from "@/shared/jobs/model";
import { useSuspenseQuery } from "@tanstack/react-query";
import { createServerFn } from "@tanstack/react-start";
import * as z from "zod";
import Button from "@/components/Button";

const requestSchema = z.object({
code: z.string(),
});

const policy = new Policy({
systemRoles: [Policy.SystemRole.Admin],
languageMember: true,
});

export const getAIGlossesImportFormData = createServerFn()
.inputValidator(requestSchema)
.middleware([
createPolicyMiddleware({
policy,
languageCodeField: "code",
}),
])
.handler(async ({ data }) => {
const [job, availableLanguages] = await Promise.all([
getAIGlossImportJobReadModel(data.code),
getAIGlossImportLanguagesReadModel(),
]);

const language = availableLanguages.find(
(entry) => entry.code === data.code,
);

return { job, languageAvailable: !!language };
});
import { getAIGlossesImportFormData } from "@/ui/admin/serverFns/getAIGlossesImportFormData";

export default function AIGlossesImportForm({ code }: { code: string }) {
const { data, refetch } = useSuspenseQuery({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,9 @@ function ActivityChartSVG({
const xScaleRef = useRef<d3.ScaleTime<number, number, never> | null>(null);

// Unique IDs so multiple charts on the same page don't share gradient defs
const uid = useId().replace(/:/g, "");
const gradientId = `activity-gradient-${uid}`;
const clipId = `activity-clip-${uid}`;
const chartId = useId().replace(/:/g, "");
const gradientId = `activity-gradient-${chartId}`;
const clipId = `activity-clip-${chartId}`;

const [elementRef, size] = useElementDimensions<HTMLDivElement>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import ActivityChart, {
ActivityChartProvider,
type ActivityChartEntry,
type ActivityChartRange,
} from "@/modules/languages/ui/ActivityChart";
import ProgressBar from "@/modules/languages/ui/ProgressBar";
import RangeToggle from "@/modules/languages/ui/RangeToggle";
} from "@/ui/admin/components/ActivityChart";
import ProgressBar from "@/ui/admin/components/ProgressBar";
import RangeToggle from "@/ui/admin/components/RangeToggle";
import Button from "@/components/Button";

export interface BookProgressDetails {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,39 +1,11 @@
import { requestInterlinearExport } from "@/modules/export/actions/requestInterlinearExport";
import { createPolicyMiddleware, Policy } from "@/modules/access";
import { JobStatus } from "@/shared/jobs/model";
import Button from "@/components/Button";
import { Icon } from "@/components/Icon";
import exportJobQueryService from "../data-access/ExportJobQueryService";
import JobStatusPoller from "@/shared/jobs/ui/JobStatusPoller";
import { useTranslations } from "use-intl";
import { useSuspenseQuery } from "@tanstack/react-query";
import { createServerFn } from "@tanstack/react-start";
import * as z from "zod";

const requestSchema = z.object({
languageCode: z.string().min(1),
});

const policy = new Policy({
systemRoles: [Policy.SystemRole.Admin],
languageMember: true,
});

export const getInterlinearExportPanelData = createServerFn()
.inputValidator(requestSchema)
.middleware([
createPolicyMiddleware({
policy,
}),
])
.handler(async ({ data }) => {
const [jobs, pendingJob] = await Promise.all([
exportJobQueryService.findRecentForLanguage(data.languageCode),
exportJobQueryService.findPendingForLanguage(data.languageCode),
]);

return { jobs, pendingJob };
});
import { getInterlinearExportPanelData } from "@/ui/admin/serverFns/getInterlinearExportPanelData";

export default function InterlinearExportPanel({
languageCode,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"use client";

import { useMemo } from "react";
import ProgressBar from "@/modules/languages/ui/ProgressBar";
import ProgressBar from "@/ui/admin/components/ProgressBar";
import Button from "@/components/Button";
import { Icon } from "@/components/Icon";
import {
Expand All @@ -11,14 +11,12 @@ import {
} from "./DashboardCard";
import BookProgressDetailsModal, {
type BookProgressDetails,
} from "@/modules/languages/ui/BookProgressDetailsModal";
import { type ActivityChartRange } from "@/modules/languages/ui/ActivityChart";
import {
type LanguageDashboardActivityEntryReadModel,
type LanguageDashboardBookReadModel,
type LanguageDashboardContributionReadModel,
type LanguageDashboardMemberReadModel,
} from "@/modules/reporting";
} from "@/ui/admin/components/BookProgressDetailsModal";
import { type ActivityChartRange } from "@/ui/admin/components/ActivityChart";
import { type LanguageDashboardActivityEntryReadModel } from "@/ui/admin/readModels/getLanguageDashboardActivityReadModel";
import { type LanguageDashboardContributionReadModel } from "@/ui/admin/readModels/getLanguageDashboardContributionsReadModel";
import { type LanguageDashboardMemberReadModel } from "@/ui/admin/readModels/getLanguageDashboardMembersReadModel";
import { type LanguageDashboardBookReadModel } from "@/ui/admin/readModels/getLanguageDashboardBooksReadModel";

interface LanguageBookProgressDashboardCardProps {
className?: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
import { UTCDate } from "@date-fns/utc";
import * as d3 from "d3";
import { useEffect, useId, useMemo, useRef, useState } from "react";
import { type LanguageApprovalActivityReadModel } from "@/modules/reporting";
import { type LanguageApprovalActivityReadModel } from "@/ui/admin/readModels/getLanguageApprovalActivityReadModel";
import { useElementDimensions } from "@/utils/measure-element";
import { type ActivityChartRange } from "./ActivityChart";
import {
Expand Down Expand Up @@ -248,8 +248,8 @@ function ApprovalActivityChart({
>
> | null>(null);

const uid = useId().replace(/:/g, "");
const clipId = `approval-clip-${uid}`;
const chartId = useId().replace(/:/g, "");
const clipId = `approval-clip-${chartId}`;

const [elementRef, size] = useElementDimensions<HTMLDivElement>();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import {
LanguageDashboardActivityEntryReadModel,
LanguageDashboardContributionReadModel,
LanguageDashboardMemberReadModel,
} from "@/modules/reporting";
import { type LanguageDashboardActivityEntryReadModel } from "@/ui/admin/readModels/getLanguageDashboardActivityReadModel";
import { type LanguageDashboardContributionReadModel } from "@/ui/admin/readModels/getLanguageDashboardContributionsReadModel";
import { type LanguageDashboardMemberReadModel } from "@/ui/admin/readModels/getLanguageDashboardMembersReadModel";
import ActivityChart, { ActivityChartRange } from "./ActivityChart";
import { useMemo } from "react";
import { Icon } from "@/components/Icon";
import ContributionBar from "./ContributionBar";
import ServerAction from "@/components/ServerAction";
import { removeLanguageMember } from "../actions/removeLanguageMember";
import { reinviteLanguageMemberAction } from "../actions/reinviteLanguageMember";
import { removeLanguageMember } from "@/modules/languages/actions/removeLanguageMember";
import { reinviteLanguageMemberAction } from "@/modules/languages/actions/reinviteLanguageMember";
import {
DashboardCard,
DashboardCardEmptyState,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Radio, RadioGroup } from "@headlessui/react";
import { type ActivityChartRange } from "@/modules/languages/ui/ActivityChart";
import { type ActivityChartRange } from "@/ui/admin/components/ActivityChart";

export default function RangeToggle({
range,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { getDb } from "@/db";
import { TRANSLATION_JOB_TYPES } from "../jobs/jobType";
import { TRANSLATION_JOB_TYPES } from "@/modules/translation/jobs/jobType";
import { JobStatus } from "@/shared/jobs/model";

interface AIGlossImportJobReadModel {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { aiGlossImportService } from "../data-access/aiGlossImportService";
import { aiGlossImportService } from "@/modules/translation/data-access/aiGlossImportService";

// TODO: Cache this
export function getAIGlossImportLanguagesReadModel() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { initializeDatabase } from "@/tests/vitest/dbUtils";
import { expect, test } from "vitest";
import { getAllLanguagesReadModel } from "./getAllLanguagesReadModel";
import { getAllLanguagesReadModel } from "@/ui/admin/readModels/getAllLanguagesReadModel";
import { languageFactory } from "@/modules/languages/test-utils/languageFactory";

initializeDatabase();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import { test, expect } from "vitest";
import { initializeDatabase } from "@/tests/vitest/dbUtils";
import { getLanguageSettingsReadModel } from "./getLanguageSettingsReadModel";
import { languageFactory } from "../test-utils/languageFactory";
import { MachineGlossStrategy, TextDirectionRaw } from "../model";
import { getLanguageSettingsReadModel } from "@/ui/admin/readModels/getLanguageSettingsReadModel";
import { languageFactory } from "@/modules/languages/test-utils/languageFactory";
import {
MachineGlossStrategy,
TextDirectionRaw,
} from "@/modules/languages/model";

initializeDatabase();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { getDb } from "@/db";
import { sql } from "kysely";
import { MachineGlossStrategy } from "../model";
import { MachineGlossStrategy } from "@/modules/languages/model";

export interface LanguageSettingsReadModel {
englishName: string;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { initializeDatabase } from "@/tests/vitest/dbUtils";
import { expect, test } from "vitest";
import { searchLanguagesReadModel } from "./searchLanguagesReadModel";
import { searchLanguagesReadModel } from "@/ui/admin/readModels/searchLanguagesReadModel";
import { languageFactory } from "@/modules/languages/test-utils/languageFactory";

initializeDatabase();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { jsonBuildObject } from "kysely/helpers/postgres";
import { getDb } from "@/db";
import { UserStatusRaw } from "../model/UserStatus";
import { UserStatusRaw } from "@/modules/users/model/UserStatus";
import { sql } from "kysely";
import { SystemRoleRaw } from "../model/SystemRole";
import { EmailStatusRaw } from "../model/EmailStatus";
import { SystemRoleRaw } from "@/modules/users/model/SystemRole";
import { EmailStatusRaw } from "@/modules/users/model/EmailStatus";

export interface UserReadModel {
id: string;
Expand Down
Loading
Loading