M: Remove inheritance data from archive schemas

This commit is contained in:
Ivan 2024-08-23 18:32:40 +03:00
parent 4eebcaef53
commit 251ebece5d
3 changed files with 21 additions and 20 deletions

View File

@ -115,14 +115,19 @@ class RSFormSerializer(serializers.ModelSerializer):
fields = '__all__' fields = '__all__'
def to_representation(self, instance: LibraryItem) -> dict: def to_representation(self, instance: LibraryItem) -> dict:
result = LibraryItemDetailsSerializer(instance).data result = self.to_base_data(instance)
result['items'] = []
for cst in RSForm(instance).constituents().order_by('order'):
result['items'].append(CstSerializer(cst).data)
result['inheritance'] = []
for link in Inheritance.objects.filter(Q(child__schema=instance) | Q(parent__schema=instance)): for link in Inheritance.objects.filter(Q(child__schema=instance) | Q(parent__schema=instance)):
result['inheritance'].append([link.child.pk, link.parent.pk]) result['inheritance'].append([link.child.pk, link.parent.pk])
return result
def to_base_data(self, instance: LibraryItem) -> dict:
''' Create serializable base representation without redundant data. '''
result = LibraryItemDetailsSerializer(instance).data
result['items'] = []
result['oss'] = [] result['oss'] = []
result['inheritance'] = []
for cst in RSForm(instance).constituents().order_by('order'):
result['items'].append(CstSerializer(cst).data)
for oss in LibraryItem.objects.filter(operations__result=instance).only('alias'): for oss in LibraryItem.objects.filter(operations__result=instance).only('alias'):
result['oss'].append({ result['oss'].append({
'id': oss.pk, 'id': oss.pk,
@ -132,11 +137,9 @@ class RSFormSerializer(serializers.ModelSerializer):
def to_versioned_data(self) -> dict: def to_versioned_data(self) -> dict:
''' Create serializable version representation without redundant data. ''' ''' Create serializable version representation without redundant data. '''
result = self.to_representation(cast(LibraryItem, self.instance)) result = self.to_base_data(cast(LibraryItem, self.instance))
del result['versions'] del result['versions']
del result['editors'] del result['editors']
del result['inheritance']
del result['oss']
del result['owner'] del result['owner']
del result['visible'] del result['visible']
@ -150,7 +153,7 @@ class RSFormSerializer(serializers.ModelSerializer):
def from_versioned_data(self, version: int, data: dict) -> dict: def from_versioned_data(self, version: int, data: dict) -> dict:
''' Load data from version. ''' ''' Load data from version. '''
result = self.to_representation(cast(LibraryItem, self.instance)) result = self.to_base_data(cast(LibraryItem, self.instance))
result['version'] = version result['version'] = version
return result | data return result | data

View File

@ -20,7 +20,7 @@ interface EditorRSFormCardProps {
} }
function EditorRSFormCard({ isModified, onDestroy, setIsModified }: EditorRSFormCardProps) { function EditorRSFormCard({ isModified, onDestroy, setIsModified }: EditorRSFormCardProps) {
const { schema } = useRSForm(); const model = useRSForm();
const controller = useRSEdit(); const controller = useRSEdit();
function initiateSubmit() { function initiateSubmit() {
@ -53,10 +53,10 @@ function EditorRSFormCard({ isModified, onDestroy, setIsModified }: EditorRSForm
> >
<FlexColumn className='flex-shrink'> <FlexColumn className='flex-shrink'>
<FormRSForm id={globals.library_item_editor} isModified={isModified} setIsModified={setIsModified} /> <FormRSForm id={globals.library_item_editor} isModified={isModified} setIsModified={setIsModified} />
<EditorLibraryItem item={schema} isModified={isModified} controller={controller} /> <EditorLibraryItem item={model.schema} isModified={isModified} controller={controller} />
</FlexColumn> </FlexColumn>
<RSFormStats stats={schema?.stats} /> {model.schema ? <RSFormStats stats={model.schema.stats} isArchive={model.isArchive} /> : null}
</AnimateFade> </AnimateFade>
</> </>
); );

View File

@ -13,17 +13,15 @@ import ValueStats from '@/components/ui/ValueStats';
import { type IRSFormStats } from '@/models/rsform'; import { type IRSFormStats } from '@/models/rsform';
interface RSFormStatsProps { interface RSFormStatsProps {
stats?: IRSFormStats; isArchive: boolean;
stats: IRSFormStats;
} }
function RSFormStats({ stats }: RSFormStatsProps) { function RSFormStats({ stats, isArchive }: RSFormStatsProps) {
if (!stats) {
return null;
}
return ( return (
<div className='flex flex-col mt-3 md:gap-1 md:ml-6 md:mt-8 md:w-[18rem] w-[25rem]'> <div className='flex flex-col mt-3 md:gap-1 md:ml-5 md:mt-8 md:w-[18rem] w-[25rem]'>
<div className='grid grid-cols-4 gap-1 mb-3 justify-items-end'> <div className='grid grid-cols-4 gap-1 mb-3 justify-items-end'>
<div className='col-span-2 w-fit flex gap-3'> <div className='col-span-2 w-fit flex gap-3 hover:cursor-default'>
<span>Всего</span> <span>Всего</span>
<span>{stats.count_all}</span> <span>{stats.count_all}</span>
</div> </div>
@ -37,7 +35,7 @@ function RSFormStats({ stats }: RSFormStatsProps) {
id='count_inherited' id='count_inherited'
icon={<IconChild size='1.25rem' className='clr-text-primary' />} icon={<IconChild size='1.25rem' className='clr-text-primary' />}
value={stats.count_inherited} value={stats.count_inherited}
title='Наследованные' titleHtml={isArchive ? 'Архивные схемы не хранят<br/> информацию о наследовании' : 'Наследованные'}
/> />
<ValueStats <ValueStats