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__'
def to_representation(self, instance: LibraryItem) -> dict:
result = LibraryItemDetailsSerializer(instance).data
result['items'] = []
for cst in RSForm(instance).constituents().order_by('order'):
result['items'].append(CstSerializer(cst).data)
result['inheritance'] = []
result = self.to_base_data(instance)
for link in Inheritance.objects.filter(Q(child__schema=instance) | Q(parent__schema=instance)):
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['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'):
result['oss'].append({
'id': oss.pk,
@ -132,11 +137,9 @@ class RSFormSerializer(serializers.ModelSerializer):
def to_versioned_data(self) -> dict:
''' 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['editors']
del result['inheritance']
del result['oss']
del result['owner']
del result['visible']
@ -150,7 +153,7 @@ class RSFormSerializer(serializers.ModelSerializer):
def from_versioned_data(self, version: int, data: dict) -> dict:
''' Load data from version. '''
result = self.to_representation(cast(LibraryItem, self.instance))
result = self.to_base_data(cast(LibraryItem, self.instance))
result['version'] = version
return result | data

View File

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

View File

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