Skip to content

Commit e7bf9dc

Browse files
committed
project setting
1 parent 540b83a commit e7bf9dc

File tree

1 file changed

+21
-15
lines changed

1 file changed

+21
-15
lines changed

flagsmith-jira-app/src/frontend/components/ProjectSettingsPage.tsx

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,20 @@ import { readProjectIds, writeProjectIds } from "../jira";
2424
import { WrappableComponentProps } from "./ErrorWrapper";
2525

2626
type ProjectSettingsFormProps = WrappableComponentProps & {
27-
projectIds: string[];
27+
savedProjectIds: string[];
2828
saveProjectIds: (projectIds: string[]) => Promise<void>;
2929
};
3030

31-
const ProjectSettingsForm = ({ setError, saveProjectIds, ...props }: ProjectSettingsFormProps) => {
31+
const ProjectSettingsForm = ({
32+
setError,
33+
saveProjectIds,
34+
savedProjectIds,
35+
}: ProjectSettingsFormProps) => {
3236
// set form state from props
33-
const [projectIds, setProjectIds] = useState<string[]>(props.projectIds);
37+
const [projectIds, setProjectIds] = useState<string[]>(savedProjectIds);
3438
useEffect(() => {
35-
setProjectIds(props.projectIds);
36-
}, [props.projectIds]);
39+
setProjectIds(savedProjectIds);
40+
}, [savedProjectIds]);
3741

3842
// get projects from Flagsmith API
3943
const [projects] = usePromise(
@@ -55,9 +59,12 @@ const ProjectSettingsForm = ({ setError, saveProjectIds, ...props }: ProjectSett
5559
setError,
5660
);
5761

58-
const currentProjects = projects?.filter((each) => projectIds.includes(String(each.id)));
62+
const currentProjects = projects?.filter((each) => savedProjectIds.includes(String(each.id)));
5963
const validProjectIds = new Set(projects?.map((project) => String(project.id)) ?? []);
6064
const allSelectedValid = projectIds.every((id) => validProjectIds.has(id));
65+
const hasChanges =
66+
projectIds.length !== savedProjectIds.length ||
67+
!projectIds.every((id) => savedProjectIds.includes(id));
6168

6269
const projectInputId = useId();
6370
const projectOptions = useMemo(
@@ -79,8 +86,8 @@ const ProjectSettingsForm = ({ setError, saveProjectIds, ...props }: ProjectSett
7986
// get features for current project from Flagsmith API
8087
const [features] = usePromise(async () => {
8188
try {
82-
if (props.projectIds.length > 0) {
83-
return await readFeatures({ projectIds: props.projectIds });
89+
if (savedProjectIds.length > 0) {
90+
return await readFeatures({ projectIds: savedProjectIds });
8491
} else {
8592
return undefined;
8693
}
@@ -89,7 +96,7 @@ const ProjectSettingsForm = ({ setError, saveProjectIds, ...props }: ProjectSett
8996
console.error(error);
9097
return [];
9198
}
92-
}, [props.projectIds]);
99+
}, [savedProjectIds]);
93100

94101
if (projects === undefined) {
95102
return <Spinner label="Loading projects" />;
@@ -113,18 +120,17 @@ const ProjectSettingsForm = ({ setError, saveProjectIds, ...props }: ProjectSett
113120
<Box xcss={{ marginBottom: "space.300" }}>
114121
<Inline space="space.050" alignBlock="center">
115122
<Strong>Project(s):</Strong>
116-
{/* Need to put this in a list */}
117123
{(currentProjects?.length ?? 0) > 0 && (
118124
<Text>{currentProjects!.map((project) => project.name).join(", ")}</Text>
119125
)}
120-
{currentProjects?.length === 0 && projects?.length > 0 && !connected && (
126+
{currentProjects?.length === 0 && projects?.length > 0 && !connected && !hasChanges && (
121127
<Lozenge appearance="moved">Not connected</Lozenge>
122128
)}
123129
{projects?.length === 0 && <Lozenge appearance="removed">No projects to connect</Lozenge>}
124-
{(currentProjects ?? []).length > 0 && !!features && !connected && (
130+
{(currentProjects ?? []).length > 0 && !!features && !connected && !hasChanges && (
125131
<Lozenge appearance="removed">No features to connect</Lozenge>
126132
)}
127-
{connected && <Lozenge appearance="success">Connected</Lozenge>}
133+
{connected && !hasChanges && <Lozenge appearance="success">Connected</Lozenge>}
128134
</Inline>
129135
</Box>
130136
{!!projectOptions && (
@@ -149,7 +155,7 @@ const ProjectSettingsForm = ({ setError, saveProjectIds, ...props }: ProjectSett
149155
<Button
150156
onClick={onSave}
151157
appearance="primary"
152-
isDisabled={!projectIds.length || !allSelectedValid}
158+
isDisabled={!projectIds.length || !allSelectedValid || !hasChanges}
153159
>
154160
Save
155161
</Button>
@@ -201,7 +207,7 @@ const ProjectSettingsPage = ({ setError }: WrappableComponentProps): JSX.Element
201207
return ready ? (
202208
<ProjectSettingsForm
203209
setError={setError}
204-
projectIds={projectIds}
210+
savedProjectIds={projectIds}
205211
saveProjectIds={saveProjectIds}
206212
/>
207213
) : (

0 commit comments

Comments
 (0)