/
pv_hum
/
schemaforge
Обзор
Документация
Войти
/
pv_hum
/
schemaforge
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
frontend/src/store/useStudioStore.ts
146 строк
5 KB
pv_hum
Initial commit
21 май 2026, 22:25
21 май 2026, 22:25
0de9fa8
Код
Авторство
О чём код?
import { create } from 'zustand'; import { ActiveView, ChangedFlags, DbConnectionParams, DbStatus, ProductMode, SchemaModel, SqlDialect, ValidationResult, ChangeSummary, } from '../types/schema'; import { sampleSql } from '../lib/sampleSql'; import { sampleSchema } from '../lib/sampleSchema'; const sampleValidation: ValidationResult = { valid: true, issues: [{ level: 'info', code: 'VALID', message: 'Демонстрационная схема загружена.' }], }; const sampleChanges: ChangeSummary = { items: [{ type: 'added', target: 'demo', message: 'Загружен демонстрационный пример.' }], }; const defaultDbParams: DbConnectionParams = { sourceType: 'postgresql', host: 'localhost', port: 5432, database: 'postgres', username: 'postgres', password: '', schema: 'public', }; interface StudioState { mode: ProductMode; activeView: ActiveView; dialect: SqlDialect; promptText: string; revisionPrompt: string; sqlText: string; generatedSql: string; schema: SchemaModel; validation: ValidationResult; changes?: ChangeSummary; rawJsonOpen: boolean; busy: boolean; dirty: ChangedFlags; useDatabaseContext: boolean; dbModalOpen: boolean; dbParams: DbConnectionParams; dbStatus: DbStatus; setMode: (mode: ProductMode) => void; setActiveView: (view: ActiveView) => void; setDialect: (dialect: SqlDialect) => void; setPromptText: (value: string) => void; setRevisionPrompt: (value: string) => void; setSqlText: (value: string) => void; setGenerated: (schema: SchemaModel, sql: string, validation: ValidationResult, changes?: ChangeSummary) => void; resetSqlToGenerated: () => void; setBusy: (busy: boolean) => void; toggleRawJson: () => void; loadSampleSql: () => void; loadSampleWorkspace: () => void; markClean: () => void; setUseDatabaseContext: (value: boolean) => void; setDbModalOpen: (open: boolean) => void; setDbParams: (params: Partial<DbConnectionParams>) => void; setDbStatus: (status: Partial<DbStatus>) => void; } export const useStudioStore = create<StudioState>((set) => ({ mode: 'prompt', activeView: 'er', dialect: 'postgresql', promptText: 'Спроектируй схему интернет-магазина с пользователями, товарами, заказами, оплатами, адресами и отзывами.', revisionPrompt: 'Добавь audit-поля во все таблицы и сделай users.email уникальным.', sqlText: sampleSql, generatedSql: sampleSql, schema: sampleSchema, validation: sampleValidation, changes: sampleChanges, rawJsonOpen: false, busy: false, dirty: { sqlChanged: false, erChanged: false, promptChanged: false }, useDatabaseContext: false, dbModalOpen: false, dbParams: defaultDbParams, dbStatus: { connected: false, introspected: false, sourceType: '', databaseName: '', hasMetadataContext: false, lastError: '', }, setMode: (mode) => set({ mode }), setActiveView: (activeView) => set({ activeView }), setDialect: (dialect) => set({ dialect }), setPromptText: (promptText) => set({ promptText, dirty: { sqlChanged: false, erChanged: false, promptChanged: true } }), setRevisionPrompt: (revisionPrompt) => set({ revisionPrompt }), setSqlText: (sqlText) => set({ sqlText, dirty: { sqlChanged: true, erChanged: false, promptChanged: false } }), setGenerated: (schema, sql, validation, changes) => set({ schema, sqlText: sql, generatedSql: sql, validation, changes, dirty: { sqlChanged: false, erChanged: false, promptChanged: false }, }), resetSqlToGenerated: () => set((s) => ({ sqlText: s.generatedSql, dirty: { ...s.dirty, sqlChanged: false }, })), setBusy: (busy) => set({ busy }), toggleRawJson: () => set((s) => ({ rawJsonOpen: !s.rawJsonOpen })), loadSampleSql: () => set({ sqlText: sampleSql, generatedSql: sampleSql, mode: 'sql', activeView: 'sql', dirty: { sqlChanged: true, erChanged: false, promptChanged: false }, }), loadSampleWorkspace: () => set({ schema: sampleSchema, sqlText: sampleSql, generatedSql: sampleSql, validation: sampleValidation, changes: sampleChanges, mode: 'prompt', activeView: 'er', dirty: { sqlChanged: false, erChanged: false, promptChanged: false }, }), markClean: () => set({ dirty: { sqlChanged: false, erChanged: false, promptChanged: false } }), setUseDatabaseContext: (useDatabaseContext) => set({ useDatabaseContext }), setDbModalOpen: (dbModalOpen) => set({ dbModalOpen }), setDbParams: (params) => set((s) => ({ dbParams: { ...s.dbParams, ...params } })), setDbStatus: (status) => set((s) => ({ dbStatus: { ...s.dbStatus, ...status } })), }));