## Summary
- **Remove all "core" prefixes** from the views system — the
metadata-based storage migration is complete, so `CoreView`,
`coreViewsSelector`, `getCoreViews`, etc. are now just `View`,
`viewsSelector`, `getViews`
- **Eliminate the entire converter layer** (15 files, ~850 lines
deleted) — `convertCoreViewToView` and all sub-converters were either
no-ops or trivially adding `__typename` / mapping identical enum values.
Local enums now re-export from generated GraphQL types directly (single
source of truth)
- **Unify `View` and `ViewWithRelations`** into one type —
`ViewWithRelations` is now a type alias for `View`, selectors return
data directly without conversion
### Backend
- Rename `@ObjectType('CoreView')` → `@ObjectType('View')` (and all
sub-entities)
- Rename resolver methods: `getCoreViews` → `getViews`, `createCoreView`
→ `createView`, etc.
- Rename `FIND_ALL_CORE_VIEWS_GRAPHQL_OPERATION` →
`FIND_ALL_VIEWS_GRAPHQL_OPERATION`
### Frontend
- Delete 15 converter files (`convertGqlView*ToView*`,
`convertView*ToGql`, `convertViewWithRelationsToView`)
- Re-export `ViewType`, `ViewKey`, `ViewFilterGroupLogicalOperator` from
generated enums (no more duplicate enum definitions with different
casing)
- Replace `ViewOpenRecordInType` with `ViewOpenRecordIn` from generated
- Remove `__typename` from all local view sub-types
- Remove unused `variant` from `ViewFilter`, make `displayValue` and
`definition` optional
- Rename ~45 GraphQL query/mutation files and all selectors to drop
"core" prefix
- Delete unused `viewsWithRelationsSelector`
120 lines
2.3 KiB
TypeScript
120 lines
2.3 KiB
TypeScript
/* oxlint-disable no-console, lingui/no-unlocalized-strings */
|
|
import { graphqlRequest, writeGeneratedFile } from './utils.js';
|
|
|
|
const FIND_ALL_VIEWS_QUERY = `
|
|
query FindAllViews {
|
|
getViews {
|
|
id
|
|
name
|
|
objectMetadataId
|
|
type
|
|
key
|
|
icon
|
|
position
|
|
isCompact
|
|
openRecordIn
|
|
kanbanAggregateOperation
|
|
kanbanAggregateOperationFieldMetadataId
|
|
mainGroupByFieldMetadataId
|
|
shouldHideEmptyGroups
|
|
anyFieldFilterValue
|
|
calendarFieldMetadataId
|
|
calendarLayout
|
|
visibility
|
|
createdByUserWorkspaceId
|
|
viewFields {
|
|
id
|
|
fieldMetadataId
|
|
viewId
|
|
isVisible
|
|
position
|
|
size
|
|
aggregateOperation
|
|
createdAt
|
|
updatedAt
|
|
deletedAt
|
|
}
|
|
viewFieldGroups {
|
|
id
|
|
name
|
|
position
|
|
isVisible
|
|
viewId
|
|
createdAt
|
|
updatedAt
|
|
deletedAt
|
|
viewFields {
|
|
id
|
|
fieldMetadataId
|
|
viewId
|
|
isVisible
|
|
position
|
|
size
|
|
aggregateOperation
|
|
createdAt
|
|
updatedAt
|
|
deletedAt
|
|
}
|
|
}
|
|
viewFilters {
|
|
id
|
|
fieldMetadataId
|
|
operand
|
|
value
|
|
viewFilterGroupId
|
|
positionInViewFilterGroup
|
|
subFieldName
|
|
viewId
|
|
createdAt
|
|
updatedAt
|
|
deletedAt
|
|
}
|
|
viewFilterGroups {
|
|
id
|
|
parentViewFilterGroupId
|
|
logicalOperator
|
|
positionInViewFilterGroup
|
|
viewId
|
|
}
|
|
viewSorts {
|
|
id
|
|
fieldMetadataId
|
|
direction
|
|
viewId
|
|
}
|
|
viewGroups {
|
|
id
|
|
isVisible
|
|
fieldValue
|
|
position
|
|
viewId
|
|
createdAt
|
|
updatedAt
|
|
deletedAt
|
|
}
|
|
}
|
|
}
|
|
`;
|
|
|
|
export const generateViews = async (token: string) => {
|
|
console.log('Fetching views from /metadata ...');
|
|
|
|
const data = (await graphqlRequest(
|
|
'/metadata',
|
|
FIND_ALL_VIEWS_QUERY,
|
|
token,
|
|
)) as {
|
|
getViews: Record<string, unknown>[];
|
|
};
|
|
|
|
console.log(` Got ${data.getViews.length} views.`);
|
|
|
|
writeGeneratedFile(
|
|
'metadata/views/mock-views-data.ts',
|
|
'mockedViews',
|
|
'ViewWithRelations[]',
|
|
"import { type ViewWithRelations } from '@/views/types/ViewWithRelations';",
|
|
data.getViews,
|
|
);
|
|
};
|