Skip to content

Commit

Permalink
Merge pull request #45 from 2060-io/39-services-list-add-dts-collection
Browse files Browse the repository at this point in the history
39-Services list: add dts collection
  • Loading branch information
lotharking committed Aug 30, 2024
2 parents 5160c3a + c7faed0 commit 6a0a9cd
Show file tree
Hide file tree
Showing 49 changed files with 537 additions and 230 deletions.
94 changes: 75 additions & 19 deletions src/components/Services/DtsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ import React, { useEffect, useMemo, useRef, useState } from "react";
import {
DtsListPostRequest,
DtsResourceApi,
DtsGetIdGetRequest
} from "../../openapi-client/apis/DtsResourceApi";
import {
DtsCollectionVO,
DtsVO,
EntityState,
} from "../../openapi-client/models";
import { DtsFilter } from "../../openapi-client/models";
import { Configuration, ConfigurationParameters } from "../../openapi-client";
import { Configuration, ConfigurationParameters, DtsCollectionResourceApi } from "../../openapi-client";
import { useAuth } from "react-oidc-context";
import { Log } from "oidc-client-ts";
import Link from "next/link";
Expand Down Expand Up @@ -39,16 +41,30 @@ function DtsList() {
const [sortKey, setSortKey] = useState('name');
const [sortOrder, setSortOrder] = useState('asc');
const visiblePages = 4;
const [dtsCollectionVOs, setDtsCollectionVOs] = useState<DtsCollectionVO[]>()

const filterByDts = (item: DtsVO) => item.name?.toLowerCase().includes(searchDts.toLowerCase());
const filterByState = (item: DtsVO) => item.state?.toLowerCase().includes(filterState.toLowerCase());
const filterByCollectionFk = (item: DtsVO) => item.collectionFk == getCollectionFk();

const filteredItems = useMemo(() => {
return dtsVOs.filter(filterByDts).filter(filterByState);
}, [dtsVOs, filterByDts, filterByState]);
const sortedItems = useMemo(() => {
return sortItems(filteredItems, sortKey, sortOrder);
}, [filteredItems, sortKey, sortOrder]);
const getCollectionFk = (): string =>
dtsCollectionVOs?.find(
({ template, templateRepo }: DtsCollectionVO) =>
template?.toLowerCase().includes(searchDts.toLowerCase()) ||
templateRepo?.toLowerCase().includes(searchDts.toLowerCase())
)?.id ?? '';

const filteredItems = useMemo(() =>
dtsVOs.filter(
item => (filterByDts(item) || filterByCollectionFk(item)) && filterByState(item)
),
[dtsVOs, filterByDts, filterByCollectionFk, filterByState]
);

const sortedItems = useMemo(
() => sortItems(filteredItems, sortKey, sortOrder),
[filteredItems, sortKey, sortOrder]
);

const totalPages = Math.ceil(filteredItems.length / itemsPerPage);
const indexOfLastItem = currentPage * itemsPerPage;
Expand All @@ -68,16 +84,24 @@ function DtsList() {
Log.setLogger(console);
Log.setLevel(Log.DEBUG);

function listDtsVOs() {
const configParameters: ConfigurationParameters = {
headers: {
Authorization: "Bearer " + auth.user?.access_token,
},
basePath: process.env.NEXT_PUBLIC_BACKEND_BASE_PATH,
};
const configParameters: ConfigurationParameters = {
headers: {
Authorization: "Bearer " + auth.user?.access_token,
},
basePath: process.env.NEXT_PUBLIC_BACKEND_BASE_PATH,
};

const config = new Configuration(configParameters);
const api = new DtsResourceApi(config);
function createDtsResourceApi(): DtsResourceApi {
return new DtsResourceApi(new Configuration(configParameters));
}

function createDtsCollectionResourceApi(): DtsCollectionResourceApi {
const api = new DtsCollectionResourceApi(new Configuration(configParameters));
return api;
}

function listDtsVOs() {
const api = createDtsResourceApi();

class DtsFilterClass implements DtsFilter {
state?: EntityState;
Expand All @@ -91,7 +115,11 @@ function DtsList() {
const requestParameters = new DtsListPostRequestClass();
requestParameters.dtsFilter = filterw;

api.dtsListPost(requestParameters).then((resp) => setDtsVOs(resp))
api.dtsListPost(requestParameters).then((resp) => {
getAllDtsCollectionVO(resp).finally(() => {
setDtsVOs(resp)
})
})
.catch((error) => setDtsVOs([
{description: "Description",state: EntityState.Editing,name: "Default name",debug: false, createdTs: new Date()},
{description: "Description 2",state: EntityState.Enabled,name: "Default name 2",debug: false, createdTs: new Date()},
Expand Down Expand Up @@ -185,6 +213,34 @@ function DtsList() {
);
}

async function getAllDtsCollectionVO(dtsVOs: DtsVO[]): Promise<void> {
const api = createDtsCollectionResourceApi();

const dtsCollectionPromise = dtsVOs.map(async (dts) => {
const collecFk: DtsGetIdGetRequest = { id: String(dts.collectionFk) };
try {
return api.dtscGetIdGet(collecFk);
} catch (error) {
return {};
}
});

const dtsCollectionVO = await Promise.all(dtsCollectionPromise);

if (!dtsCollectionVOs) {
setDtsCollectionVOs(dtsCollectionVO);
}
}

function getDataTemplate(idCollection: string): DtsCollectionVO {
if(undefined !== dtsCollectionVOs){
return dtsCollectionVOs?.find(
(dtsCollectionVO: DtsCollectionVO) => idCollection === String(dtsCollectionVO.id)
) ?? {};
}
return {}
}

if (auth.isAuthenticated) {
return (
<div className="xsm:overflow-x-auto 2xsm:overflow-x-auto sm:overflow-x-auto md:overflow-x-auto lg:overflow-x-auto xl:overflow-x-visible 2xl:overflow-x-visible 3xl:overflow-x-visible rounded-sm border border-stroke px-5 pb-2.5 pt-6 shadow-default dark:border-strokedark dark:bg-boxdark sm:px-7.5 xl:pb-1" id="list-services">
Expand Down Expand Up @@ -284,12 +340,12 @@ function DtsList() {

<td className="border-b border-[#eee] px-4 py-5 pl-9 text-center dark:border-strokedark xl:pl-11">
<h5 className="font-medium text-black dark:text-white">
Template Repo
{getDataTemplate(String(dts.collectionFk))?.templateRepo ?? 'no repo'}
</h5>
</td>
<td className="border-b border-[#eee] px-4 py-5 pl-9 text-center dark:border-strokedark xl:pl-11">
<h5 className="font-medium text-black dark:text-white">
Template
{getDataTemplate(String(dts.collectionFk))?.template ?? 'no template' }
</h5>
</td>
<td className="border-b border-[#eee] px-4 py-5 pl-9 text-center dark:border-strokedark xl:pl-11">
Expand Down
79 changes: 29 additions & 50 deletions src/components/Services/DtsViewEdit.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
"use client";

import React, { ChangeEvent, useEffect, useState } from 'react';
import { DtsListPostRequest, DtsResourceApi } from '../../openapi-client/apis/DtsResourceApi';
import { DtsFilterFromJSON, DtsTemplateVO, DtsVO, EntityState, DtsType } from '../../openapi-client/models';
import { DtsFilter } from '../../openapi-client/models';
import { Configuration, ConfigurationParameters, DtsTemplateResourceApi } from '../../openapi-client';
import { DtsResourceApi } from './index';
import { DtsTemplateVO, DtsVO, EntityState, DtsType } from './index';
import { Configuration, ConfigurationParameters, DtsCollectionResourceApi, DtsTemplateResourceApi } from './index';
import { useAuth } from "react-oidc-context";
import { usePathname, useRouter } from 'next/navigation';
import SelectDtsTemplate from '../Templates/SelectDtsTemplate';
import {v4 as uuidv4} from 'uuid';
import Ajv from 'ajv';
import { load, dump } from 'js-yaml';
Expand Down Expand Up @@ -49,6 +47,27 @@ function DtsViewEdit() {
const [errorDTSConf, setErrorDTSConf] = useState(false);
const [errorName, setErrorName] = useState(false);

const configParameters: ConfigurationParameters = {
headers: {
Authorization: "Bearer " + auth.user?.access_token,
},
basePath: process.env.NEXT_PUBLIC_BACKEND_BASE_PATH,
};

function createDtsResourceApi(): DtsResourceApi {
return new DtsResourceApi(new Configuration(configParameters));
}

function createDtsCollectionResourceApi(): DtsCollectionResourceApi {
const api = new DtsCollectionResourceApi(new Configuration(configParameters));
return api;
}

function createDtsTemplateResourceApi(): DtsTemplateResourceApi {
const api = new DtsTemplateResourceApi(new Configuration(configParameters));
return api;
}

const handleChange = async (e: ChangeEvent<HTMLSelectElement>) => {
setSelectedOption(e.target.value);
setIsOptionSelected(true);
Expand Down Expand Up @@ -118,14 +137,7 @@ function DtsViewEdit() {

const listTemplateNames = async () => {
try {
const configParameters: ConfigurationParameters = {
headers: {
Authorization: "Bearer " + auth.user?.access_token,
},
basePath: process.env.NEXT_PUBLIC_BACKEND_BASE_PATH,
};
const config = new Configuration(configParameters);
const api = new DtsResourceApi(config);
const api = createDtsCollectionResourceApi();
const dtscCollectionList = await api.dtscListPost();
const dtscCollecion = dtscCollectionList[0];

Expand All @@ -149,15 +161,7 @@ function DtsViewEdit() {
const idinurl = pathname.replace("/services/", "");

function listDtsTemplateVOs() {
const configParameters: ConfigurationParameters = {
headers: {
'Authorization': 'Bearer ' + auth.user?.access_token ,
},
basePath: process.env.NEXT_PUBLIC_BACKEND_BASE_PATH,
};
const config = new Configuration(configParameters);
const apiDtst = new DtsTemplateResourceApi(config);

const apiDtst = createDtsTemplateResourceApi()
apiDtst.dtstListPost({}).then((resp) => setDtsTemplateVOs(prevState => [...prevState, ...resp]));
}

Expand All @@ -169,16 +173,7 @@ function DtsViewEdit() {
const newTemplate:DtsTemplateVO = {title: 'string', state: EntityState.Editing, yaml: 'string', name: "string", id: id, type: DtsType.ConversationalService}
setDtsTemplateVOs([newTemplate]);
} else {
const configParameters: ConfigurationParameters = {
headers: {
'Authorization': 'Bearer ' + auth.user?.access_token ,
},
basePath: process.env.NEXT_PUBLIC_BACKEND_BASE_PATH,
};


const config = new Configuration(configParameters);
const api = new DtsResourceApi(config);
const api = createDtsResourceApi()

api.dtsGetIdGet({ id: idinurl}).then((resp) => {
if (resp) {
Expand Down Expand Up @@ -223,16 +218,7 @@ useEffect(() => {
}

async function saveDtsVO() {
const configParameters: ConfigurationParameters = {
headers: {
'Authorization': 'Bearer ' + auth.user?.access_token ,
},
basePath: process.env.NEXT_PUBLIC_BACKEND_BASE_PATH,
};


const config = new Configuration(configParameters);
const api = new DtsResourceApi(config);
const api = createDtsResourceApi();

if(false === isMatchNameServiceWithNameTemplate(selectedOption)){
dtsVO.name = undefined !== dtsVO.title ? dtsVO.title : '';
Expand All @@ -254,14 +240,7 @@ useEffect(() => {
async function saveDtsTemplateVO() {
if(selectedOption !== 'current'){
const templateVO = dtsTemplateVOs.find(t => t.id === dtsVO?.templateFk);
const configParameters: ConfigurationParameters = {
headers: {
'Authorization': 'Bearer ' + auth.user?.access_token ,
},
basePath: process.env.NEXT_PUBLIC_BACKEND_BASE_PATH,
};
const config = new Configuration(configParameters);
const api = new DtsTemplateResourceApi(config);
const api = createDtsTemplateResourceApi();

templateVO && await api.dtstSavePost({ dtsTemplateVO: templateVO });
}
Expand Down
3 changes: 2 additions & 1 deletion src/components/Services/index.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export * from '@/app/ui/TimedToasts/WarningTimedToast'
export * from '@/app/ui/Pagination/Pagination'
export * from '@/components/Dropdowns/DropdownUpdateState'
export * from '@/components/Dropdowns/DropdownUpdateState'
export * from '@/openapi-client/'
3 changes: 3 additions & 0 deletions src/openapi-client/.openapi-generator/FILES
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
.openapi-generator-ignore
apis/CampaignResourceApi.ts
apis/CampaignScheduleResourceApi.ts
apis/DtsCollectionResourceApi.ts
apis/DtsResourceApi.ts
apis/DtsTemplateResourceApi.ts
apis/GenericEntityResourceApi.ts
Expand All @@ -21,6 +22,8 @@ models/CampaignScheduleVO.ts
models/CampaignType.ts
models/CampaignTypeFilter.ts
models/CampaignVO.ts
models/DtsCollectionFilter.ts
models/DtsCollectionVO.ts
models/DtsFilter.ts
models/DtsTemplateFilter.ts
models/DtsTemplateVO.ts
Expand Down
2 changes: 1 addition & 1 deletion src/openapi-client/apis/CampaignResourceApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* dashboard-backend API
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
*
* The version of the OpenAPI document: 1.0
* The version of the OpenAPI document: main-20240823173931
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
Expand Down
2 changes: 1 addition & 1 deletion src/openapi-client/apis/CampaignScheduleResourceApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* dashboard-backend API
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
*
* The version of the OpenAPI document: 1.0
* The version of the OpenAPI document: main-20240823173931
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
Expand Down
Loading

0 comments on commit 6a0a9cd

Please sign in to comment.