Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: click show skill manifest no response in form editor #4979

Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { IDialogContentStyles } from 'office-ui-fabric-react/lib/Dialog';
import { IModalStyles } from 'office-ui-fabric-react/lib/Modal';
import { useRecoilValue } from 'recoil';

import { skillNameIdentifierByProjectIdSelector, skillsStateSelector, userSettingsState } from '../../recoilModel';
import { skillsStateSelector, userSettingsState } from '../../recoilModel';

// -------------------- Styles -------------------- //

Expand Down Expand Up @@ -53,21 +53,18 @@ const dragOptions: IDragOptions = {
interface DisplayManifestModalProps {
isDraggable?: boolean;
isModeless?: boolean;
skillNameIdentifier?: string | null;
skillNameIdentifier: string;
onDismiss: () => void;
projectId: string;
}

export const DisplayManifestModal: React.FC<DisplayManifestModalProps> = ({
isDraggable = true,
isModeless = true,
projectId,
skillNameIdentifier,
onDismiss,
}) => {
const skills = useRecoilValue(skillsStateSelector);
const userSettings = useRecoilValue(userSettingsState);
const skillsByProjectId = useRecoilValue(skillNameIdentifierByProjectIdSelector);
const skillNameIdentifier = skillsByProjectId[projectId];
useEffect(() => onDismiss, []);

const selectedSkill = useMemo(() => {
Expand Down
12 changes: 6 additions & 6 deletions Composer/packages/client/src/pages/design/DesignPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ import {
skillNameIdentifierByProjectIdSelector,
SkillInfo,
projectMetaDataState,
displayManifestModalOnProjectIdSelector,
displaySkillManifestState,
} from '../../recoilModel';
import { CreateQnAModal } from '../../components/QnA';
import { triggerNotSupported } from '../../utils/dialogValidator';
Expand Down Expand Up @@ -133,7 +133,7 @@ const DesignPage: React.FC<RouteComponentProps<{ dialogId: string; projectId: st
const schemas = useRecoilValue(schemasState(skillId ?? projectId));
const dialogs = useRecoilValue(validateDialogsSelectorFamily(skillId ?? projectId));
const skills = useRecoilValue(skillsStateSelector);
const displaySkillManifestOnProjectId = useRecoilValue(displayManifestModalOnProjectIdSelector);
const displaySkillManifestNameIdentifier = useRecoilValue(displaySkillManifestState);
const skillsByProjectId = useRecoilValue(skillNameIdentifierByProjectIdSelector);
const projectDialogsMap = useRecoilValue(projectDialogsMapSelector);
const { startSingleBot, stopSingleBot } = useBotOperations();
Expand Down Expand Up @@ -697,7 +697,7 @@ const DesignPage: React.FC<RouteComponentProps<{ dialogId: string; projectId: st

const skillNameIdentifier = skillsByProjectId[skillId];
if (!skillNameIdentifier) return;
displayManifestModal(skillNameIdentifier, skillId);
displayManifestModal(skillNameIdentifier);
};

const handleErrorClick = (projectId: string, skillId: string, diagnostic: Diagnostic) => {
Expand Down Expand Up @@ -864,10 +864,10 @@ const DesignPage: React.FC<RouteComponentProps<{ dialogId: string; projectId: st
onSubmit={handleCreateQnA}
/>

{displaySkillManifestOnProjectId && (
{displaySkillManifestNameIdentifier && (
<DisplayManifestModal
projectId={displaySkillManifestOnProjectId}
onDismiss={() => dismissManifestModal(displaySkillManifestOnProjectId)}
skillNameIdentifier={displaySkillManifestNameIdentifier}
onDismiss={() => dismissManifestModal()}
/>
)}
{brokenSkillInfo && (
Expand Down
5 changes: 5 additions & 0 deletions Composer/packages/client/src/recoilModel/atoms/appState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -264,3 +264,8 @@ export const exportSkillModalInfoState = atom<undefined | string>({
key: getFullyQualifiedKey('exportSkillModalInfo'),
default: undefined,
});

export const displaySkillManifestState = atom<undefined | string>({
key: getFullyQualifiedKey('displaySkillManifest'),
default: undefined,
});
5 changes: 0 additions & 5 deletions Composer/packages/client/src/recoilModel/atoms/botState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -226,11 +226,6 @@ export const onAddSkillDialogCompleteState = atomFamily<any, string>({
default: { func: undefined },
});

export const displaySkillManifestState = atomFamily<any, string>({
key: getFullyQualifiedKey('displaySkillManifest'),
default: undefined,
});

export const showAddLanguageModalState = atomFamily<boolean, string>({
key: getFullyQualifiedKey('showAddLanguageModal'),
default: false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,14 @@ import {
onAddSkillDialogCompleteState,
settingsState,
showAddSkillDialogModalState,
displaySkillManifestState,
botProjectFileState,
botNameIdentifierState,
locationState,
projectMetaDataState,
botDisplayNameState,
} from '../../atoms/botState';
import { dispatcherState } from '../../DispatcherWrapper';
import { botEndpointsState, botProjectIdsState, currentProjectIdState } from '../../atoms';
import { botEndpointsState, botProjectIdsState, currentProjectIdState, displaySkillManifestState } from '../../atoms';
import { Dispatcher } from '..';
import { skillsStateSelector } from '../../selectors';

Expand Down Expand Up @@ -71,7 +70,7 @@ describe('skill dispatcher', () => {
const onAddSkillDialogComplete = useRecoilValue(onAddSkillDialogCompleteState(projectId));
const settings = useRecoilValue(settingsState(projectId));
const showAddSkillDialogModal = useRecoilValue(showAddSkillDialogModalState(projectId));
const displaySkillManifest = useRecoilValue(displaySkillManifestState(projectId));
const displaySkillManifest = useRecoilValue(displaySkillManifestState);
const skills = useRecoilValue(skillsStateSelector);
const [botEndpoints, setBotEndpoints] = useRecoilState(botEndpointsState);
const currentDispatcher = useRecoilValue(dispatcherState);
Expand Down Expand Up @@ -111,7 +110,7 @@ describe('skill dispatcher', () => {
{ recoilState: onAddSkillDialogCompleteState(projectId), initialValue: { func: undefined } },
{ recoilState: settingsState(projectId), initialValue: {} },
{ recoilState: showAddSkillDialogModalState(projectId), initialValue: false },
{ recoilState: displaySkillManifestState(projectId), initialValue: undefined },
{ recoilState: displaySkillManifestState, initialValue: undefined },
{ recoilState: currentProjectIdState, initialValue: projectId },
{ recoilState: botProjectIdsState, initialValue: [projectId, ...skillIds] },
{ recoilState: settingsState(projectId), initialValue: {} },
Expand Down Expand Up @@ -171,14 +170,14 @@ describe('skill dispatcher', () => {

it('displayManifestModal', async () => {
await act(async () => {
dispatcher.displayManifestModal('foo', projectId);
dispatcher.displayManifestModal('foo');
});
expect(renderedComponent.current.displaySkillManifest).toEqual('foo');
});

it('dismissManifestModal', async () => {
await act(async () => {
dispatcher.dismissManifestModal(projectId);
dispatcher.dismissManifestModal();
});
expect(renderedComponent.current.displaySkillManifest).toBeUndefined();
});
Expand Down
8 changes: 4 additions & 4 deletions Composer/packages/client/src/recoilModel/dispatchers/skill.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,12 +103,12 @@ export const skillDispatcher = () => {
}
);

const displayManifestModal = useRecoilCallback(({ set }: CallbackInterface) => (id: string, projectId: string) => {
set(displaySkillManifestState(projectId), id);
const displayManifestModal = useRecoilCallback(({ set }: CallbackInterface) => (id: string) => {
set(displaySkillManifestState, id);
});

const dismissManifestModal = useRecoilCallback(({ set }: CallbackInterface) => (projectId: string) => {
set(displaySkillManifestState(projectId), undefined);
const dismissManifestModal = useRecoilCallback(({ set }: CallbackInterface) => () => {
set(displaySkillManifestState, undefined);
});

return {
Expand Down
13 changes: 0 additions & 13 deletions Composer/packages/client/src/recoilModel/selectors/skills.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import {
projectMetaDataState,
locationState,
botProjectIdsState,
displaySkillManifestState,
} from '../atoms';

export const skillsProjectIdSelector = selector({
Expand Down Expand Up @@ -80,15 +79,3 @@ export const skillNameIdentifierByProjectIdSelector = selector({
return skills;
},
});

// Display manifest modal if return is projectId
export const displayManifestModalOnProjectIdSelector = selector({
key: 'displayManifestModalOnProjectIdSelector',
get: ({ get }) => {
const botProjects = get(botProjectIdsState);
const displaySkillManifestOnProjects = botProjects.filter((projectId) => {
return get(displaySkillManifestState(projectId));
});
return displaySkillManifestOnProjects[0];
},
});
2 changes: 1 addition & 1 deletion Composer/packages/client/src/shell/useShell.ts
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ export function useShell(source: EventSource, projectId: string): Shell {
undo,
redo,
commitChanges,
displayManifestModal: (skillId) => displayManifestModal(skillId, projectId),
displayManifestModal: (skillId) => displayManifestModal(skillId),
isFeatureEnabled: (featureFlagKey: FeatureFlagKey): boolean => featureFlags?.[featureFlagKey]?.enabled ?? false,
updateDialogSchema: async (dialogSchema: DialogSchemaFile) => {
updateDialogSchema(dialogSchema, projectId);
Expand Down