* Add Translations route and guard it with feature flag. Empty TranslationsList main component to test route. * Translation list component * Add translations namespace to js-sdk * Translations hook * Avoid incorrectly throwing when updating and locale not included * Translations bulk editor component v1 * Add batch method to translations namespace in js-sdk * Protect translations edit route with feature flag * Handle reference_id search param * Replace entity_type entity_id for reference reference_id * Manage translations from product detail page * Dynamically resolve base hook for retrieving translations * Fix navigation from outside settings/translations * Navigation to bulk editor from product list * Add Translations to various product module types * Type useVariants hook * Handle product module entities translations in bulk editor * Fix categories issue in datagrid due to column clash * Translations bulk navigation from remaining entities detail pages * Add remaining bulk editor navigation for list components. Fix invalidation query for variants * Expandable text cell v1 * Popover approach * Add *supported_locales.locale to default fields in stores list endpoint * Make popover more aligned to excell approach * Correctly tie the focused cell anchor to popover * Rework translations main component UI * Fix link def export * Swap axis for translations datagrid * Add original column to translations data grid * Remove is_default store locale from backend * Remove ldefault locale from ui * Type * Add changeset * Comments * Remove unused import * Add translations to admin product categories endpoint allowed fields * Default locale removal * Lazy loading with infinite scroll data grid * Infinite list hook and implementation for products and variants * Translation bulk editor lazy loaded datagrid * Prevent scroll when forcing focus, to avoid scrollTop reset on infinite loading * Confgiure placeholder data * Cleanup logs and refactor * Infinite query hooks for translatable entities * Batch requests for translation batch endpoint * Clean up * Update icon * Add query param validator in settings endpoint * Settings endpoint param type * JS sdk methods for translation settings and statistics * Retrieve translatable fields and entities dynamically. Remove hardcoded information from tranlations list * Resolve translation aggregate completion dynamically * Format label * Resolve bulk editor header label dynamically * Include type and collection in translations config * Avoid showing product option and option values in translatable entities list * Translations * Make translations bulk editor content columns wider * Disable hiding Original column in translations bulk editor * Adjust translations completion styles * Fix translations config screen * Locale selector switcher with conditional locale column rendering * Batch one locale at a time * Hooks save actions to footer buttons * Reset dirty state on save * Dynamic row heights for translations bulk editor. Replace expandable cell for text cell, with additional isMultiLine config * Make columns take as much responsive width as possible and divide equally * more padding to avoid unnecessary horizontal scrollbar * Update statistics graphs * Translations * Statistics graphs translations * Translation, text sizes and weight in stat graphs * Conditionally show/hide column visibility dropdown in datagrid * Allow to pass component to place in DataGrid header and use it in translations bulk editor * Center text regardless of multiLine config * Apply full height to datagrid cell regardles of multiSelect config * Colors and fonts * Handle key down for text area in text cell * MultilineCell with special keydown handling * Rework form schema to match new single locale edit flow * Update created translations to include id, to avoid duplication issue on subsequent calls * Handle space key for text cells * Finish hooking up multiline cell with key and mouse events * Disable remaining buttons when batch is ongoing * Style updates * Update style * Refactor to make form updates and sync/comparison with server data more comprehensive and robust * Update styles * Bars and labels alignment * Add languages tooltip * Styles and translation * Navigation update * Disable edit translations button when no reference count * Invert colors --------- Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com> Co-authored-by: Adrien de Peretti <adrien.deperetti@gmail.com>
74 lines
2.2 KiB
TypeScript
74 lines
2.2 KiB
TypeScript
import { applyAndAndOrOperators } from "../../utils/common-validators"
|
|
import {
|
|
createBatchBody,
|
|
createFindParams,
|
|
createSelectParams,
|
|
} from "../../utils/validators"
|
|
import { z } from "zod"
|
|
|
|
export const AdminGetTranslationParams = createSelectParams()
|
|
|
|
export const AdminGetTranslationParamsFields = z.object({
|
|
q: z.string().optional(),
|
|
reference_id: z.union([z.string(), z.array(z.string())]).optional(),
|
|
reference: z.string().optional(),
|
|
locale_code: z.string().optional(),
|
|
})
|
|
|
|
export type AdminGetTranslationsParamsType = z.infer<
|
|
typeof AdminGetTranslationsParams
|
|
>
|
|
|
|
export const AdminGetTranslationsParams = createFindParams({
|
|
limit: 20,
|
|
offset: 0,
|
|
})
|
|
.merge(AdminGetTranslationParamsFields)
|
|
.merge(applyAndAndOrOperators(AdminGetTranslationParamsFields))
|
|
|
|
export type AdminCreateTranslationType = z.infer<typeof AdminCreateTranslation>
|
|
export const AdminCreateTranslation = z.object({
|
|
reference_id: z.string(),
|
|
reference: z.string(),
|
|
locale_code: z.string(),
|
|
translations: z.record(z.string()),
|
|
})
|
|
|
|
export type AdminUpdateTranslationType = z.infer<typeof AdminUpdateTranslation>
|
|
export const AdminUpdateTranslation = z.object({
|
|
id: z.string(),
|
|
reference_id: z.string().optional(),
|
|
reference: z.string().optional(),
|
|
locale_code: z.string().optional(),
|
|
translations: z.record(z.string()).optional(),
|
|
})
|
|
|
|
export type AdminBatchTranslationsType = z.infer<typeof AdminBatchTranslations>
|
|
export const AdminBatchTranslations = createBatchBody(
|
|
AdminCreateTranslation,
|
|
AdminUpdateTranslation
|
|
)
|
|
|
|
export type AdminTranslationStatisticsType = z.infer<
|
|
typeof AdminTranslationStatistics
|
|
>
|
|
export const AdminTranslationStatistics = z
|
|
.object({
|
|
locales: z.union([z.string(), z.array(z.string())]),
|
|
entity_types: z.union([z.string(), z.array(z.string())]),
|
|
})
|
|
.transform((data) => ({
|
|
// Normalize to arrays for consistent handling
|
|
locales: Array.isArray(data.locales) ? data.locales : [data.locales],
|
|
entity_types: Array.isArray(data.entity_types)
|
|
? data.entity_types
|
|
: [data.entity_types],
|
|
}))
|
|
|
|
export type AdminTranslationSettingsParamsType = z.infer<
|
|
typeof AdminTranslationSettingsParams
|
|
>
|
|
export const AdminTranslationSettingsParams = z.object({
|
|
entity_type: z.string().optional(),
|
|
})
|