Skip to content

Commit

Permalink
refacter workspace template hooks
Browse files Browse the repository at this point in the history
Signed-off-by: Hailong Cui <ihailong@amazon.com>
  • Loading branch information
Hailong-am committed Jun 9, 2023
1 parent b84a894 commit 6192831
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 20 deletions.
2 changes: 1 addition & 1 deletion src/core/types/workspace_template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ export interface WorkspaceTemplate {
/**
* Sample screenshot image location
*/
screenshot?: string;
coverImage?: string;
}
41 changes: 22 additions & 19 deletions src/plugins/workspace/public/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,32 @@
*/

import { ApplicationStart, PublicAppInfo } from 'opensearch-dashboards/public';
import { useObservable } from 'react-use';
import { useMemo } from 'react';
import { WorkspaceTemplate } from '../../../core/types';

export function useWorkspaceTemplate(application: ApplicationStart) {
let workspaceTemplates = [] as WorkspaceTemplate[];
const templateFeatureMap = new Map<string, PublicAppInfo[]>();
const applications = useObservable(application.applications$);

application.applications$.subscribe((applications) =>
applications.forEach((app) => {
const { workspaceTemplate: templates = [] } = app;
workspaceTemplates.push(...templates);
for (const template of templates) {
const features = templateFeatureMap.get(template.id) || [];
features.push(app);
templateFeatureMap.set(template.id, features);
}
})
);
return useMemo(() => {
let workspaceTemplates = [] as WorkspaceTemplate[];
const templateFeatureMap = new Map<string, PublicAppInfo[]>();

workspaceTemplates.sort((a, b) => (a.order || 0) - (b.order || 0));
workspaceTemplates = [...new Set(workspaceTemplates)];
if (applications) {
applications.forEach((app) => {
const { workspaceTemplate: templates = [] } = app;
workspaceTemplates.push(...templates);
for (const template of templates) {
const features = templateFeatureMap.get(template.id) || [];
features.push(app);
templateFeatureMap.set(template.id, features);
}
});

return {
workspaceTemplates,
templateFeatureMap,
};
workspaceTemplates = [...new Set(workspaceTemplates)];
workspaceTemplates.sort((a, b) => (a.order || 0) - (b.order || 0));
}

return { workspaceTemplates, templateFeatureMap };
}, [applications]);
}

0 comments on commit 6192831

Please sign in to comment.