Skip to content

chore(site): refactor deployment values service to react-query #9669

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

Merged
merged 5 commits into from
Sep 14, 2023

Conversation

BrunoQuaresma
Copy link
Collaborator

No description provided.


export const deploymentConfig = () => {
return {
queryKey: ["deployment", "config"],
Copy link
Member

@Parkreiner Parkreiner Sep 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could the query keys be declared as const? That would not only make sure that they're kept immutable, but also give more precise type information when accessing elements of the key at specific indices

Copy link
Member

@Parkreiner Parkreiner Sep 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know if this would cause the compiler to flag anything, though. I'd mainly be worried about type mismatches between readonly arrays with normal arrays

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think they could be but I don't see to much value on doing that honestly, what use case you are thinking of?

Copy link
Member

@Parkreiner Parkreiner Sep 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I'm looking at the code again, and I think it has limited value here, just because all the values are strings. I think I generally default to this approach, but it's most useful when you have a key array that mixes different types.

const key1 = ["workspaces", 23, { running: true }];
const key2 = ["workspaces", 23, { running: true }] as const;

// Inferred as type (string | number | { running: boolean }), because array is arbitrary-length
const userId1 = key1[1];

// Inferred as type number, because key2 is a fixed-length, immutable tuple
const userId2 = key2[1];

It's more friendly to the noUncheckedIndexedAccess compiler setting, too

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see, but I don't see we using something similar like this - accessing the keys directly - so I think we could wait until it becomes an issue or provide more value. Wdyt? But if you feel strong about that, we can do it for all the query keys, I just would do in a diff PR (since it is going to change non related queries as well).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I'm okay with keeping things as-is. There have been cases where I've passed the query key into the function to construct which API endpoint and which parameters to use, and the as const declarations would help with that, but if there hasn't been a need for that pattern, then I agree with you – it's going to have limited use

Copy link
Member

@Parkreiner Parkreiner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think all of this makes sense. My comments mainly deal with clarifying questions for myself.


export const deploymentConfig = () => {
return {
queryKey: ["deployment", "config"],
Copy link
Member

@Parkreiner Parkreiner Sep 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know if this would cause the compiler to flag anything, though. I'd mainly be worried about type mismatches between readonly arrays with normal arrays

@@ -34,14 +34,9 @@ export const useDeploySettings = (): DeploySettingsContextValue => {
};

export const DeploySettingsLayout: FC = () => {
const [state] = useMachine(deploymentConfigMachine);
Copy link
Member

@Parkreiner Parkreiner Sep 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still need to learn XState, but I'm guessing that this line was meant to expose the machine as a read-only value?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is to instantiate a machine

Copy link
Member

@Parkreiner Parkreiner Sep 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, so it creates the new machine instance, but it's bound as local state for that given component, right? it's not quite a Redux setup where there's only ever one store, and the components selectively subscribe to it?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, it is bound to the component, in this case to the DashboardLayout

@BrunoQuaresma BrunoQuaresma removed the request for review from aslilac September 14, 2023 21:02
Copy link
Member

@Parkreiner Parkreiner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks really good!


export const deploymentConfig = () => {
return {
queryKey: ["deployment", "config"],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I'm okay with keeping things as-is. There have been cases where I've passed the query key into the function to construct which API endpoint and which parameters to use, and the as const declarations would help with that, but if there hasn't been a need for that pattern, then I agree with you – it's going to have limited use

@BrunoQuaresma BrunoQuaresma merged commit 3b088a5 into main Sep 14, 2023
@BrunoQuaresma BrunoQuaresma deleted the bq/refactor-deployment-values-service branch September 14, 2023 21:49
@github-actions github-actions bot locked and limited conversation to collaborators Sep 14, 2023
@BrunoQuaresma
Copy link
Collaborator Author

Related to #9598

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants