Skip to content

Commit 90addd8

Browse files
committed
#2209 add extension update into edit of a entity
1 parent 0c83670 commit 90addd8

File tree

12 files changed

+414
-212
lines changed

12 files changed

+414
-212
lines changed

Components/UI/BExIS.UI/BExIS.UI.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@
119119
<Compile Include="Hooks\View.cs" />
120120
<Compile Include="Models\DataTable.cs" />
121121
<Compile Include="Models\EntitySelectorModel.cs" />
122+
<Compile Include="Models\ExtensionItem.cs" />
122123
<Compile Include="Models\FileUploader.cs" />
123124
<Compile Include="Models\ListItem.cs" />
124125
<Compile Include="Models\Menu.cs" />
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace BExIS.UI.Models
8+
{
9+
public class ExtensionItem
10+
{
11+
public long Id { get; set; }
12+
public int Version { get; set; }
13+
public string Title { get; set; }
14+
15+
public string LinkType { get; set; }
16+
public string ReferenceType { get; set; }
17+
}
18+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<h1>creat extnsion here</h1>
Lines changed: 39 additions & 211 deletions
Original file line numberDiff line numberDiff line change
@@ -1,236 +1,64 @@
11
<script lang="ts">
2-
import { getEdit, getHooks } from './services';
32
import { Page, ErrorMessage, pageContentLayoutType } from '@bexis2/bexis2-core-ui';
4-
import { Modal } from '@skeletonlabs/skeleton';
5-
6-
import type { linkType } from '@bexis2/bexis2-core-ui';
7-
3+
import { onMount } from 'svelte';
4+
import type { linkType } from '@bexis2/bexis2-core-ui';
5+
import Entity from './Entity.svelte';
6+
import { getEntityTemplateByObject } from '../../services/EntityTemplateCaller';
87
import Header from './Header.svelte';
9-
import Data from './Data.svelte';
10-
import Hooks from './Hooks.svelte';
118
12-
import {
13-
latestFileUploadDate,
14-
latestDataDescriptionDate,
15-
latestFileReaderDate,
16-
latestSubmitDate,
17-
hooksStatus,
18-
latestValidationDate,
19-
latestDataDate
20-
} from './stores';
9+
import type { ExtensionType} from './types'
10+
import AdvancedEntity from './AdvancedEntity.svelte';
11+
import { getExtensions } from './services';
2112
22-
import type { EditModel, HookModel, ViewModel } from './types';
23-
import Placeholder from './PlaceholderPage.svelte';
2413
25-
// load attributes from div
2614
let container;
2715
let id: number = 0;
28-
2916
let version: number;
17+
let title = "";
3018
31-
let title = '';
32-
33-
$: title;
34-
35-
let model: EditModel = {
36-
id: 0,
37-
versionId: 0,
38-
version: 0,
39-
title: '',
40-
hooks: [],
41-
views: []
42-
};
43-
44-
let hookStatusList: { [key: string]: number };
45-
$: hookStatusList;
46-
// hooks
47-
let hooks: HookModel[];
48-
$: hooks = [];
49-
50-
let datasethooks: HookModel[];
51-
$: datasethooks = [];
52-
53-
let addtionalhooks: HookModel[];
54-
$: addtionalhooks = [];
55-
56-
// views
57-
let views: ViewModel[];
58-
$: views = [];
59-
60-
let additionalViews: ViewModel[];
61-
$: additionalViews = [];
62-
63-
let messageView: ViewModel;
64-
$: messageView;
65-
66-
latestFileUploadDate.subscribe((e) => {
67-
updateHookStatus();
68-
});
69-
70-
latestDataDescriptionDate.subscribe((e) => {
71-
updateHookStatus();
72-
});
19+
let entityTemplate = null;
20+
let extensions:ExtensionType[] = []
7321
74-
latestFileReaderDate.subscribe((e) => {
75-
updateHookStatus();
76-
});
77-
78-
latestValidationDate.subscribe((e) => {
79-
updateHookStatus();
80-
});
81-
82-
latestSubmitDate.subscribe((e) => {
83-
updateHookStatus();
84-
});
85-
86-
latestDataDate.subscribe((e) => {
87-
updateHookStatus();
88-
});
89-
async function load() {
90-
console.log('LOAD EDIT', Date.now);
22+
const links: linkType[] = [
23+
{
24+
label: 'Manual',
25+
url: '/home/docs/Datasets#dataset-edit-page'
26+
}
27+
];
9128
29+
onMount(async () => {
30+
console.log('LOAD EDIT', Date.now);
9231
// get data from parent
9332
container = document.getElementById('edit');
9433
id = Number(container?.getAttribute('dataset'));
9534
version = Number(container?.getAttribute('version'));
9635
97-
// load model froms server
98-
model = await getEdit(id);
99-
hooks = model.hooks;
100-
views = model.views;
101-
title = model.title;
102-
version = model.version;
103-
104-
// // there is a need for a time delay to update the hook status
105-
// // if not exit, the first run faild because the hooks are not
106-
// setTimeout(async () => {
36+
entityTemplate = await getEntityTemplateByObject(id);
37+
console.log("🚀 ~ entityTemplate:", entityTemplate)
10738
108-
console.log('🚀 ~ file: +page.svelte:89 ~ load ~ hooks:', hooks);
109-
// update store
110-
if (model.hooks) {
111-
updateStatus(model.hooks);
112-
113-
// seperate dcm hooks from other hooks
114-
seperateHooks(model.hooks);
115-
116-
// get resultView
117-
seperateViews(views);
118-
}
39+
if(entityTemplate.hasExtension) // load extentions if existing
40+
{
41+
extensions = await getExtensions(id);
42+
console.log("🚀 ~ extensions:", extensions)
43+
}
11944
120-
// }, 1000); /* <--- If this is enough greater than transition, it doesn't happen... */
121-
}
45+
});
46+
12247
123-
async function updateHookStatus() {
124-
let wait = false;
125-
let time = 1000;
126-
127-
if (id > 0) {
128-
do {
129-
// get status of hooks,
130-
const r = await getHooks(id);
131-
132-
model.hooks = r;
133-
if (model.hooks) {
134-
updateStatus(model.hooks);
135-
136-
if (model.hooks.filter((h) => h.status == 6).length > 0) {
137-
wait = true;
138-
} else {
139-
wait = false;
140-
}
141-
142-
if (time <= 10000) {
143-
time = time * 2;
144-
}
145-
}
146-
147-
await sleep(time);
148-
console.log('test');
149-
} while (wait);
150-
}
151-
}
152-
153-
function sleep(milliseconds) {
154-
return new Promise((resolve) => setTimeout(resolve, milliseconds));
155-
}
156-
157-
// seperate dcm hooks from other hooks
158-
// known hooks - metadata, fileupload, validation
159-
function seperateHooks(hooks: HookModel[]) {
160-
datasethooks = [];
161-
addtionalhooks = [];
162-
163-
hooks.forEach((element) => {
164-
if (
165-
element.name == 'metadata' ||
166-
element.name == 'fileupload' ||
167-
element.name == 'validation' ||
168-
element.name == 'submit' ||
169-
element.name == 'datadescription' ||
170-
element.name == 'data'
171-
) {
172-
datasethooks.push(element);
173-
} else {
174-
addtionalhooks.push(element);
175-
}
176-
});
177-
}
178-
179-
// seperate known views from other views
180-
// known view - resultMessages
181-
function seperateViews(views) {
182-
views.forEach((element) => {
183-
if (element.name == 'messages') {
184-
messageView = element;
185-
} else {
186-
additionalViews.push(element);
187-
}
188-
});
189-
}
190-
191-
function updateStatus(_hooks: HookModel[]) {
192-
let dic: { [key: string]: number } = { ['']: 0 };
193-
194-
if (_hooks !== undefined) {
195-
_hooks.forEach((hook) => {
196-
dic[hook.name] = hook.status;
197-
});
198-
199-
hooksStatus.set(dic);
200-
}
201-
202-
hookStatusList = $hooksStatus;
203-
}
204-
205-
// debug infos
206-
let visible = false;
207-
208-
const links: linkType[] = [
209-
{
210-
label: 'Manual',
211-
url: '/home/docs/Datasets#dataset-edit-page'
212-
}
213-
];
21448
</script>
215-
21649
<Page title="Edit: ({id} | {title})" contentLayoutType={pageContentLayoutType.full} {links}>
217-
<Header {id} {version} {title} />
218-
{#await load()}
219-
<Placeholder />
220-
{:then a}
221-
{#if model && model.hooks && datasethooks && addtionalhooks && hookStatusList}
222-
<!-- Data Module Hooks -->
223-
<Data bind:hooks={datasethooks} {id} {version} />
22450

225-
<hr class="!border-dashed" />
51+
{#if entityTemplate}
52+
<Header {id} {version} {title} />
53+
54+
{#if entityTemplate.hasExtension} <!--if using extensions add a tab here-->
55+
<AdvancedEntity {id} {version} {title} {extensions} />
22656

227-
<Hooks bind:hooks={addtionalhooks} {id} {version} />
228-
{:else}
229-
<Placeholder />
230-
{/if}
231-
{:catch error}
232-
<ErrorMessage {error} />
233-
{/await}
234-
</Page>
57+
{:else}
58+
<Entity {id} {version} {title} />
59+
{/if}
60+
61+
{/if}
62+
23563

236-
<Modal />
64+
</Page>
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<script lang="ts">
2+
import { Tab, TabGroup } from '@skeletonlabs/skeleton';
3+
import Entity from './Entity.svelte';
4+
import type { ExtensionType } from './types';
5+
import ExtensionCreation from '../../lib/components/ExtensionCreation.svelte';
6+
7+
let tabSet: number = 0;
8+
export let id: number = 0;
9+
export let version: number;
10+
export let title = "";
11+
export let extensions:ExtensionType[] = []
12+
13+
</script>
14+
15+
<TabGroup>
16+
<Tab bind:group={tabSet} name="entity" value={0}>
17+
entity
18+
</Tab>
19+
<!--existing extentions -->
20+
21+
{#each extensions as ext (ext.id)}
22+
<Tab bind:group={tabSet} name={ext.title} value={ext.id}>
23+
{ext.title}
24+
</Tab>
25+
{/each}
26+
<!--add extentions -->
27+
<Tab bind:group={tabSet} name="add" value={100}>
28+
+
29+
</Tab>
30+
31+
<svelte:fragment slot="panel">
32+
33+
{#if tabSet === 0}
34+
<Entity {id} {version} {title} />
35+
{:else if tabSet === 100}
36+
<ExtensionCreation/>
37+
{/if}
38+
39+
{#each extensions as ext (ext.id)}
40+
{#if tabSet === ext.id}
41+
{id},{title}
42+
<Entity id={ext.id} version={0} title={ext.title} />
43+
{/if}
44+
{/each}
45+
</svelte:fragment>
46+
</TabGroup>

0 commit comments

Comments
 (0)