PromucFlow_constructor/app/client/src/pages/UserProfile/UserProfileImagePicker.tsx
Valera Melnikov b7ec5dacd8
chore: rename old ADS package (#35517)
## Description
Rename package `design-system-old` to `@appsmith/ads-old`.

## Automation

/ok-to-test tags="@tag.All"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!CAUTION]
> 🔴 🔴 🔴 Some tests have failed.
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/10286195096>
> Commit: c0d478694b12f35b88687b6dae6f252967fba540
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=10286195096&attempt=1&selectiontype=test&testsstatus=failed&specsstatus=fail"
target="_blank">Cypress dashboard</a>.
> Tags: @tag.All
> Spec: 
> The following are new failures, please fix them before merging the PR:
<ol>
>
<li>cypress/e2e/Regression/ClientSide/BugTests/DatasourceSchema_spec.ts</ol>
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/identified-flaky-tests-65890b3c81d7400d08fa9ee3?branch=master"
target="_blank">List of identified flaky tests</a>.
> <hr>Wed, 07 Aug 2024 15:26:02 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [x] No
2024-08-08 15:55:00 +03:00

86 lines
2.4 KiB
TypeScript

import React, { useState, useRef, useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { updatePhoto, removePhoto, updatePhotoId } from "actions/userActions";
import { getCurrentUser } from "selectors/usersSelectors";
import { USER_PHOTO_ASSET_URL } from "constants/userConstants";
import { DisplayImageUpload } from "@appsmith/ads-old";
import type Uppy from "@uppy/core";
import { ReduxActionErrorTypes } from "ee/constants/ReduxActionConstants";
import type { ErrorActionPayload } from "sagas/ErrorSagas";
import { USER_DISPLAY_PICTURE_FILE_INVALID } from "ee/constants/messages";
function FormDisplayImage() {
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const [file, setFile] = useState<any>();
const dispatch = useDispatch();
const user = useSelector(getCurrentUser);
const dispatchActionRef = useRef<(uppy: Uppy.Uppy) => void | null>();
const imageURL = user?.photoId
? `/api/${USER_PHOTO_ASSET_URL}/${user?.photoId}`
: "";
const onUploadComplete = (uppy: Uppy.Uppy, photoId: string) => {
uppy.reset();
dispatch(updatePhotoId({ photoId }));
};
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const onSelectFile = (file: any) => {
setFile(file.data);
};
useEffect(() => {
dispatchActionRef.current = (uppy: Uppy.Uppy) => {
dispatch(
updatePhoto({
file,
callback: (photoId: string) => onUploadComplete(uppy, photoId),
}),
);
};
}, [file]);
const upload = (uppy: Uppy.Uppy) => {
if (typeof dispatchActionRef.current === "function")
dispatchActionRef.current(uppy);
};
const removeProfileImage = () => {
dispatch(
removePhoto((photoId: string) => {
dispatch(updatePhotoId({ photoId }));
}),
);
};
const onFileTypeInvalid = () => {
const payload: ErrorActionPayload = {
show: true,
error: {
message: USER_DISPLAY_PICTURE_FILE_INVALID(),
},
};
dispatch({
type: ReduxActionErrorTypes.USER_IMAGE_INVALID_FILE_CONTENT,
payload,
});
};
return (
<DisplayImageUpload
onChange={onSelectFile}
onInvalidFileContent={onFileTypeInvalid}
onRemove={removeProfileImage}
submit={upload}
value={imageURL}
/>
);
}
export default FormDisplayImage;