Skip to content
Merged

Dev #117

Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
a11d0ad
Precommit changes
sayalijoshi27 May 15, 2024
0322120
Merge branch 'dev' of https://github.com/contentstack/migration-v2-no…
sayalijoshi27 May 15, 2024
210505a
refactor:changed stack select dropdown to asyncselect
AishDani May 15, 2024
46ec28e
refactor:code formatted by precommit
AishDani May 15, 2024
700d5f4
refactor:resolved PR comment
AishDani May 16, 2024
a3fea8f
Merge pull request #112 from contentstack/feature/project-dashboard
snehalsankhe May 16, 2024
058a350
fetch Single ContentType API
shristi-sinha May 16, 2024
8fd7ba3
Merge pull request #113 from contentstack/feature/CMG-100
sayalijoshi27 May 17, 2024
78d2b53
work around for group field uncheck
sayalijoshi27 May 17, 2024
617a92e
refactor:resolved empty selectcms issue
AishDani May 17, 2024
4f4a3b3
refactor:removed commented code
AishDani May 17, 2024
580a016
Merge pull request #114 from contentstack/feature/project-dashboard
snehalsankhe May 17, 2024
52378a9
[CMG-101] - UI for Fetch API
sayalijoshi27 May 20, 2024
49caa80
Merge branch 'dev' of https://github.com/contentstack/migration-v2-no…
sayalijoshi27 May 20, 2024
95e9149
[CMG-103] - On group uncheck child elements also get unchecked
sayalijoshi27 May 20, 2024
56826dd
Merge pull request #115 from contentstack/feature/CMG-101
AishDani May 20, 2024
d1a0a82
Merge branch 'dev' of https://github.com/contentstack/migration-v2-no…
sayalijoshi27 May 20, 2024
b55c3ca
Merge pull request #116 from contentstack/bugfix/projects
AishDani May 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 99 additions & 33 deletions ui/src/components/DestinationStack/Actions/LoadStacks.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useContext, useEffect, useState } from 'react';
import { Icon, Select, cbModal } from '@contentstack/venus-components';
import { useContext, useState } from 'react';
import { AsyncSelect, Icon, cbModal } from '@contentstack/venus-components';

import { AppContext } from '../../../context/app/app.context';
import { DEFAULT_DROPDOWN, IDropDown, INewMigration } from '../../../context/app/app.interface';
Expand Down Expand Up @@ -43,10 +43,11 @@ const LoadStacks = (props: LoadFileFormatProps) => {
created_at: ''
}
];
const [allStack, setAllStack] = useState<IDropDown[]>(loadingOption);
const [allStack, setAllStack] = useState<IDropDown[]>([]);
const [allLocales, setAllLocales] = useState<IDropDown[]>([]);

const [isSaving, setIsSaving] = useState<boolean>(false);
const [isLoading, setisLoading] = useState<boolean>(false);

const { projectId = '' }: Params<string> = useParams();

Expand Down Expand Up @@ -113,31 +114,31 @@ const LoadStacks = (props: LoadFileFormatProps) => {
//Handle Legacy cms selection
const handleDropdownChange = (name: string) => (data: IDropDown) => {
const stackChanged = selectedStack?.value !== data?.value;
const stackCleared = data?.value === '';
const stackCleared = data?.value === '' || data?.value === null || data === null;

if (name === 'stacks') {
if (stackChanged || stackCleared) {
setSelectedStack(() => ({ ...data }));
setSelectedStack(() => ({ ...data }));

const newMigrationDataObj: INewMigration = {
...newMigrationData,
destination_stack: {
...newMigrationData.destination_stack,
selectedStack: stackCleared ? DEFAULT_DROPDOWN : { ...data }
}
};
const newMigrationDataObj: INewMigration = {
...newMigrationData,
destination_stack: {
...newMigrationData?.destination_stack,
selectedStack: stackCleared ? DEFAULT_DROPDOWN : { ...data }
}
};

updateNewMigrationData(newMigrationDataObj);
updateNewMigrationData(newMigrationDataObj);

//call for Step Change
if (!stackCleared) {
if (props?.handleStepChange) {
props.handleStepChange(props?.currentStep, true);
props?.handleStepChange(props?.currentStep, true);
}
//.handleStepChange(props?.currentStep, true);
}
}
};

const fetchData = async () => {
setisLoading(true);
const stackData = await getAllStacksInOrg(
newMigrationData?.destination_stack?.selectedOrg?.value
); //org id will always be there
Expand Down Expand Up @@ -179,12 +180,13 @@ const LoadStacks = (props: LoadFileFormatProps) => {
};

updateNewMigrationData(newMigrationDataObj);
setisLoading(false);
};

/**** ALL USEEffects HERE ****/
useEffect(() => {
fetchData();
}, []);
// useEffect(() => {
// fetchData();
// }, []);
const handleCreateNewStack = () => {
cbModal({
component: (props: LoadFileFormatProps) => (
Expand All @@ -209,25 +211,88 @@ const LoadStacks = (props: LoadFileFormatProps) => {
}
});
};

const loadMoreOptions: any = async ({
search,
skip,
limit
}: {
search: string;
skip: number;
limit: number;
}) => {
const stackData = await getAllStacksInOrg(
newMigrationData?.destination_stack?.selectedOrg?.value
); //org id will always be there

const stackArray = validateArray(stackData?.data?.stacks)
? stackData?.data?.stacks?.map((stack: StackResponse) => ({
label: stack?.name,
value: stack?.api_key,
uid: stack?.api_key,
master_locale: stack?.master_locale,
locales: stack?.locales,
created_at: stack?.created_at
}))
: [];

stackArray.sort((a: IDropDown, b: IDropDown) => {
new Date(b?.created_at)?.getTime() - new Date(a?.created_at)?.getTime();
});

setAllStack(stackArray);

//Set selected Stack
const selectedStackData = validateArray(stackArray)
? stackArray.find(
(stack: IDropDown) =>
stack?.value === newMigrationData?.destination_stack?.selectedStack?.value
)
: DEFAULT_DROPDOWN;

setSelectedStack(selectedStackData);

const newMigrationDataObj: INewMigration = {
...newMigrationData,
destination_stack: {
...newMigrationData?.destination_stack,
selectedStack: selectedStackData
}
};

updateNewMigrationData(newMigrationDataObj);

return { options: stackArray };
};
const onBlurDropdown = () => {
if (!isEmptyString(selectedStack?.value)) {
if (props?.handleStepChange) {
props?.handleStepChange(props?.currentStep, true);
}
}
};

return (
<div className="">
<div className="action-summary-wrapper ">
<div className="service_list ">
<div className="row">
<div className="col-12 pb-3 ">
<div className="Dropdown-wrapper p-0 active ">
<Select
className="stackselect"
version={'v2'}
options={allStack}
onChange={handleDropdownChange('stacks')}
value={selectedStack}
isSearchable={true}
isClearable={true}
isDisabled={props?.stepComponentProps?.isSummary || false}
placeholder={'Stacks'}
/>
</div>
<div className="Dropdown-wrapper p-0 active ">
<AsyncSelect
version={'v2'}
loadMoreOptions={loadMoreOptions}
onChange={handleDropdownChange('stacks')}
onBlur={onBlurDropdown}
value={selectedStack}
isSearchable={true}
isClearable={true}
width="440px"
isDisabled={props?.stepComponentProps?.isSummary || false}
placeholder={'Stacks'}
limit={10}
/>
</div>
</div>
<div className="col-12 pb-2">
<label className="title">Master Locale</label>
Expand All @@ -239,6 +304,7 @@ const LoadStacks = (props: LoadFileFormatProps) => {
</div>
</div>
</div>

<div className="stackselect pb-3 text-end">
<a className={`link`} onClick={handleCreateNewStack}>
<span className="small">
Expand Down
15 changes: 6 additions & 9 deletions ui/src/components/Modal/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,10 @@ const Modal = (props: ProjectModalProps) => {
};

const nameValidation = (value: string) => {
if(!value){
if (!value) {
setInputValue(false);
return ;
}
else if (!/^[^\s].+[^\s]$/.test(value)) {
return;
} else if (!/^[^\s].+[^\s]$/.test(value)) {
setInputValue(false);
return 'Please enter project name.';
} else if (value && value?.length > 200) {
Expand Down Expand Up @@ -128,10 +127,10 @@ const Modal = (props: ProjectModalProps) => {
placeholder={namePlaceholder}
data-testid="title-input"
name="name"
maxLength='200'
maxLength="200"
error={(meta?.error || meta?.submitError) && meta?.touched}
/>
{meta?.error && (
{meta?.error && (
<ValidationMessage
testId="cs-description-error"
className="mt-2"
Expand All @@ -140,7 +139,6 @@ const Modal = (props: ProjectModalProps) => {
{meta?.error}
</ValidationMessage>
)}

</>
);
}}
Expand All @@ -149,7 +147,6 @@ const Modal = (props: ProjectModalProps) => {
<Field className="mb-30">
<FinalField name="description" validate={descValidation}>
{({ input, meta }): JSX.Element => {

return (
<>
<FieldLabel htmlFor="description" version="v2">
Expand All @@ -170,7 +167,7 @@ const Modal = (props: ProjectModalProps) => {
data-testid="description-input"
error={(meta?.error || meta?.submitError) && meta?.touched}
/>
{meta?.error && (
{meta?.error && (
<ValidationMessage
testId="cs-description-error"
className="mt-2"
Expand Down