Skip to content

Commit 42971de

Browse files
committed
chore: refactor code to use consistent language of user vs. owner
1 parent 9a80a7e commit 42971de

File tree

6 files changed

+78
-72
lines changed

6 files changed

+78
-72
lines changed

src/client/App.tsx

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,8 @@ import { Editor } from "@/client/editor/Editor";
3131
import { Preview } from "@/client/Preview";
3232
import { defaultCode } from "@/client/snippets";
3333
import { examples } from "@/examples";
34-
import type {
35-
ParameterWithSource,
36-
PreviewOutput,
37-
WorkspaceOwner,
38-
} from "@/gen/types";
39-
import { baseMockUser, mockUsers } from "@/owner";
34+
import type { ParameterWithSource, PreviewOutput } from "@/gen/types";
35+
import { baseMockUser, mockUsers, type User } from "@/user";
4036
import { rpc } from "@/utils/rpc";
4137
import {
4238
getDynamicParametersOutput,
@@ -69,10 +65,10 @@ export const App = () => {
6965
const [output, setOutput] = useState<PreviewOutput | null>(null);
7066
const [parameters, setParameters] = useState<ParameterWithSource[]>([]);
7167

72-
const [owner, setOwner] = useState<WorkspaceOwner>(
68+
const [currentUser, setCurrentUser] = useState<User>(
7369
mockUsers[0] ?? baseMockUser,
7470
);
75-
const [owners, setOwners] = useState<WorkspaceOwner[]>(mockUsers);
71+
const [users, setUsers] = useState<User[]>(mockUsers);
7672

7773
const onDownloadOutput = () => {
7874
downloadData(output, "output.json");
@@ -88,6 +84,14 @@ export const App = () => {
8884
);
8985
};
9086

87+
useEffect(() => {
88+
const newCurrentUser = users.find((u) => u.id === currentUser.id);
89+
90+
if (newCurrentUser) {
91+
setCurrentUser(() => newCurrentUser);
92+
}
93+
}, [users, currentUser.id]);
94+
9195
useEffect(() => {
9296
if (!window.go_preview) {
9397
initWasm().then((loadState) => {
@@ -139,7 +143,7 @@ export const App = () => {
139143
return;
140144
}
141145

142-
getDynamicParametersOutput(debouncedCode, parameterValues, owner)
146+
getDynamicParametersOutput(debouncedCode, parameterValues, currentUser)
143147
.catch((e) => {
144148
console.error(e);
145149
setWasmLoadingState("error");
@@ -149,7 +153,7 @@ export const App = () => {
149153
.then((output) => {
150154
setOutput(output);
151155
});
152-
}, [debouncedCode, parameterValues, wasmLoadState, owner]);
156+
}, [debouncedCode, parameterValues, wasmLoadState, currentUser]);
153157

154158
return (
155159
<main className="flex h-dvh w-screen flex-col items-center bg-surface-primary">
@@ -193,8 +197,8 @@ export const App = () => {
193197
<Editor
194198
code={code}
195199
setCode={setCode}
196-
owners={owners}
197-
setOwners={setOwners}
200+
users={users}
201+
setUsers={setUsers}
198202
/>
199203

200204
<ResizableHandle className="bg-surface-quaternary" />
@@ -209,11 +213,11 @@ export const App = () => {
209213
setParameterValues={setParameterValues}
210214
parameters={parameters}
211215
onReset={onReset}
212-
selectedOwner={owner}
213-
owners={owners}
214-
setOwner={(owner) => {
216+
currentUser={currentUser}
217+
users={users}
218+
setUsers={(owner) => {
215219
onReset();
216-
setOwner(owner);
220+
setCurrentUser(owner);
217221
}}
218222
/>
219223
</ResizablePanelGroup>

src/client/Preview.tsx

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ import type {
4343
ParameterWithSource,
4444
ParserLog,
4545
PreviewOutput,
46-
WorkspaceOwner,
4746
} from "@/gen/types";
47+
import type { User } from "@/user";
4848
import { cn } from "@/utils/cn";
4949
import type { WasmLoadState } from "@/utils/wasm";
5050

@@ -59,9 +59,9 @@ type PreviewProps = {
5959
>;
6060
parameters: ParameterWithSource[];
6161
onReset: () => void;
62-
selectedOwner: WorkspaceOwner;
63-
owners: WorkspaceOwner[];
64-
setOwner: (owner: WorkspaceOwner) => void;
62+
currentUser: User;
63+
users: User[];
64+
setUsers: (user: User) => void;
6565
};
6666

6767
export const Preview: FC<PreviewProps> = ({
@@ -72,9 +72,9 @@ export const Preview: FC<PreviewProps> = ({
7272
setParameterValues,
7373
parameters,
7474
onReset,
75-
selectedOwner,
76-
owners,
77-
setOwner,
75+
currentUser,
76+
users,
77+
setUsers,
7878
}) => {
7979
const [params] = useSearchParams();
8080
const isDebug = params.has("debug");
@@ -191,9 +191,9 @@ export const Preview: FC<PreviewProps> = ({
191191
</AnimatePresence>
192192
</div>
193193
<UserSelect
194-
setOwner={setOwner}
195-
owners={owners}
196-
selectedOwner={selectedOwner}
194+
setUsers={setUsers}
195+
users={users}
196+
currentUser={currentUser}
197197
/>
198198
</div>
199199
}
@@ -562,26 +562,26 @@ const FormElement: FC<FormElementProps> = React.memo(
562562
FormElement.displayName = "FormElement";
563563

564564
type UserSelectProps = {
565-
selectedOwner: WorkspaceOwner;
566-
owners: WorkspaceOwner[];
567-
setOwner: (owner: WorkspaceOwner) => void;
565+
currentUser: User;
566+
users: User[];
567+
setUsers: (user: User) => void;
568568
};
569569
const UserSelect: FC<UserSelectProps> = ({
570-
selectedOwner,
571-
owners,
572-
setOwner,
570+
currentUser,
571+
users,
572+
setUsers,
573573
}) => {
574-
const selectedMissing = !owners.some(
575-
(owner) => selectedOwner.id === owner.id,
574+
const selectedMissing = !users.some(
575+
(owner) => currentUser.id === owner.id,
576576
);
577577

578578
return (
579579
<Select
580-
value={selectedOwner.id}
580+
value={currentUser.id}
581581
onValueChange={(value) => {
582-
const owner = owners.find((owner) => owner.id === value);
582+
const owner = users.find((owner) => owner.id === value);
583583
if (owner) {
584-
setOwner(owner);
584+
setUsers(owner);
585585
}
586586
}}
587587
>
@@ -590,11 +590,11 @@ const UserSelect: FC<UserSelectProps> = ({
590590
</SelectTrigger>
591591
<SelectContent>
592592
{selectedMissing ? (
593-
<SelectItem value={selectedOwner.id}>
594-
{selectedOwner.full_name || selectedOwner.name}
593+
<SelectItem value={currentUser.id}>
594+
{currentUser.full_name || currentUser.name}
595595
</SelectItem>
596596
) : null}
597-
{owners.map((owner, index) => (
597+
{users.map((owner, index) => (
598598
<SelectItem value={owner.id} key={index}>
599599
{owner.full_name || owner.name}
600600
</SelectItem>

src/client/editor/Editor.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,22 @@ import { useEditor } from "@/client/contexts/editor";
2626
import { useTheme } from "@/client/contexts/theme";
2727
import { Users } from "@/client/editor/Users";
2828
import { multiSelect, radio, switchInput, textInput } from "@/client/snippets";
29-
import type { ParameterFormType, WorkspaceOwner } from "@/gen/types";
29+
import type { ParameterFormType } from "@/gen/types";
30+
import type { User } from "@/user";
3031
import { cn } from "@/utils/cn";
3132

3233
type EditorProps = {
3334
code: string;
3435
setCode: React.Dispatch<React.SetStateAction<string>>;
35-
owners: WorkspaceOwner[];
36-
setOwners: (owners: WorkspaceOwner[]) => void;
36+
users: User[];
37+
setUsers: (owners: User[]) => void;
3738
};
3839

3940
export const Editor: FC<EditorProps> = ({
4041
code,
4142
setCode,
42-
owners,
43-
setOwners,
43+
users: owners,
44+
setUsers: setOwners,
4445
}) => {
4546
const { appliedTheme } = useTheme();
4647
const editorRef = useEditor();

src/client/editor/Users.tsx

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,35 +27,34 @@ import {
2727
import { Input } from "@/client/components/Input";
2828
import { Label } from "@/client/components/Label";
2929
import { TagInput } from "@/client/components/TagInput";
30-
import type { WorkspaceOwner } from "@/gen/types";
31-
import { emptyUser, type Owner, OwnerSchema } from "@/owner";
30+
import { emptyUser, type User, UserSchema } from "@/user";
3231
import { downloadData } from "../utils";
3332

3433
const UserFormSchema = v.object({
35-
users: v.array(OwnerSchema),
34+
users: v.array(UserSchema),
3635
});
3736
type UserForm = v.InferInput<typeof UserFormSchema>;
3837

3938
type UserFormProps = {
40-
user: Owner;
41-
onSave: (user: Owner) => void;
39+
user: User;
40+
onSave: (user: User) => void;
4241
onDelete: () => void;
4342
};
4443
const UserForm: FC<UserFormProps> = ({ user, onSave, onDelete }) => {
4544
const [isEditing, setIsEditing] = useState(user.name === "");
4645

47-
const defaultValues: InferInput<typeof OwnerSchema> = user;
46+
const defaultValues: InferInput<typeof UserSchema> = user;
4847
const form = useForm({
4948
defaultValues,
5049
validators: {
51-
onChange: OwnerSchema,
50+
onChange: UserSchema,
5251
},
5352
onSubmitInvalid: () => {
5453
// TODO
5554
},
5655
onSubmit: ({ value }) => {
5756
setIsEditing(false);
58-
const owner = v.parse(OwnerSchema, value);
57+
const owner = v.parse(UserSchema, value);
5958
onSave(owner);
6059
},
6160
});
@@ -257,8 +256,8 @@ const UserForm: FC<UserFormProps> = ({ user, onSave, onDelete }) => {
257256
};
258257

259258
type UsersProps = {
260-
users: WorkspaceOwner[];
261-
setUsers: (owners: WorkspaceOwner[]) => void;
259+
users: User[];
260+
setUsers: (owners: User[]) => void;
262261
};
263262
export const Users: FC<UsersProps> = ({ users, setUsers }) => {
264263
const uploadInputRef = useRef<HTMLInputElement | null>(null);
@@ -272,7 +271,7 @@ export const Users: FC<UsersProps> = ({ users, setUsers }) => {
272271
}
273272

274273
const parsedUsers = v.safeParse(
275-
v.array(OwnerSchema),
274+
v.array(UserSchema),
276275
JSON.parse(new TextDecoder().decode(await file.bytes())),
277276
);
278277

src/owner.ts renamed to src/user.ts

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as v from "valibot";
22
import type { WorkspaceOwner } from "@/gen/types";
33

4-
export const OwnerSchema = v.object({
4+
export const UserSchema = v.object({
55
id: v.string(),
66
name: v.string(),
77
full_name: v.string(),
@@ -13,41 +13,37 @@ export const OwnerSchema = v.object({
1313
org_id: v.string(),
1414
}),
1515
),
16-
ssh_public_key: v.string(),
17-
login_type: v.string(),
18-
}) satisfies v.GenericSchema<WorkspaceOwner>;
16+
}) satisfies v.GenericSchema<
17+
Omit<WorkspaceOwner, "ssh_public_key" | "login_type">
18+
>;
1919

20-
export type Owner = v.InferOutput<typeof OwnerSchema>;
20+
export type User = v.InferOutput<typeof UserSchema>;
2121

22-
export const emptyUser: Owner = {
22+
export const emptyUser: User = {
2323
id: "54e265e8-43b2-46a7-9d1c-b612d63f57b7",
2424
name: "",
2525
full_name: "",
2626
email: "",
27-
ssh_public_key: "",
2827
groups: [],
29-
login_type: "",
3028
rbac_roles: [],
3129
};
3230

33-
export const baseMockUser: Owner = {
31+
export const baseMockUser: User = {
3432
id: "8d36e355-e775-4c49-9b8d-ac042ed50440",
3533
name: "coder",
3634
full_name: "Coder",
3735
email: "coder@coder.com",
38-
ssh_public_key: "",
3936
groups: ["Everyone"],
40-
login_type: "password",
4137
rbac_roles: [
4238
{ name: "member", org_id: "" },
4339
{
4440
name: "organization-member",
4541
org_id: "09942665-ba1b-4661-be9f-36bf9f738c83",
4642
},
4743
],
48-
} satisfies Owner;
44+
} satisfies User;
4945

50-
export const mockUsers: Owner[] = [
46+
export const mockUsers: User[] = [
5147
{
5248
...baseMockUser,
5349
id: "f7090396-a12b-4477-b56a-eeee60d7fffa",

src/utils/wasm.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { checkerModule } from "@/client/snippets";
22
import type { PreviewOutput, WorkspaceOwner } from "@/gen/types";
3-
import { baseMockUser } from "@/owner";
3+
import { baseMockUser, type User } from "@/user";
44

55
export type WasmLoadState = "loaded" | "loading" | "error";
66

@@ -58,20 +58,26 @@ export const initWasm = async (): Promise<WasmLoadState> => {
5858
export const getDynamicParametersOutput = async (
5959
code: string,
6060
parameterValues: Record<string, string>,
61-
owner?: WorkspaceOwner,
61+
user?: User,
6262
): Promise<PreviewOutput | null> => {
6363
if (!window.go_preview) {
6464
return null;
6565
}
6666

67+
const owner: WorkspaceOwner = {
68+
...(user ?? baseMockUser),
69+
ssh_public_key: "",
70+
login_type: "",
71+
};
72+
6773
const rawOutput = await window.go_preview(
6874
{
6975
"main.tf": code,
7076
// Hard coded module for demo
7177
"checker/main.tf": checkerModule,
7278
},
7379
parameterValues,
74-
owner ?? baseMockUser,
80+
owner,
7581
);
7682

7783
if (rawOutput === undefined) {

0 commit comments

Comments
 (0)