import * as React from "react";
import { useState } from "react";
import styled from "styled-components";
import type { ControlProps } from "./BaseControl";
import BaseControl from "./BaseControl";
import type { ControlType } from "constants/PropertyControlConstants";
import type { SetProgress } from "@appsmith/ads-old";
import { FilePickerV2, FileType } from "@appsmith/ads-old";
import type { WrappedFieldInputProps, WrappedFieldMetaProps } from "redux-form";
import { Field } from "redux-form";
import { useEffect, useCallback } from "react";
import { replayHighlightClass } from "globalStyles/portals";
import { Button, Modal, ModalBody, ModalContent } from "design-system";
const StyledDiv = styled.div`
flex: 1;
border: 1px solid var(--ads-v2-color-border);
border-right: none;
padding: 6px 12px;
font-size: 14px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
border-radius: var(--ads-v2-border-radius) 0 0 var(--ads-v2-border-radius);
`;
const FilePickerWrapper = styled.div`
width: 100%;
display: flex;
align-items: center;
justify-content: center;
`;
const FilePickerContainer = styled.div`
flex-direction: row;
display: flex;
width: 270px;
.btn-select {
border-radius: 0 var(--ads-v2-border-radius) var(--ads-v2-border-radius) 0 !important;
}
`;
type RenderFilePickerProps = FilePickerControlProps & {
input?: WrappedFieldInputProps;
meta?: WrappedFieldMetaProps;
disabled?: boolean;
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
onChange: (event: any) => void;
};
function RenderFilePicker(props: RenderFilePickerProps) {
const [isOpen, setIsOpen] = useState(false);
const [appFileToBeUploaded, setAppFileToBeUploaded] = useState<{
file: File;
setProgress: SetProgress;
} | null>(null);
// const changeOpenState = (state: boolean) => setIsOpen(state);
const FileUploader = useCallback(
async (file: File, setProgress: SetProgress) => {
if (!!file) {
setAppFileToBeUploaded({
file,
setProgress,
});
} else {
setAppFileToBeUploaded(null);
}
},
[],
);
const onRemoveFile = useCallback(() => setAppFileToBeUploaded(null), []);
useEffect(() => {
if (appFileToBeUploaded?.file) {
const reader = new FileReader();
reader.readAsDataURL(appFileToBeUploaded?.file);
reader.onloadend = () => {
const base64data = reader.result;
props.input?.onChange({
name: appFileToBeUploaded?.file.name,
base64Content: base64data,
});
};
}
}, [appFileToBeUploaded]);
return (
<>
{props?.input?.value?.name}
{isOpen ? (
{
setIsOpen(false);
}}
open={isOpen}
>
) : null}
>
);
}
class FilePickerControl extends BaseControl {
constructor(props: FilePickerControlProps) {
super(props);
this.state = {
isOpen: false,
};
}
render() {
const { configProperty, disabled } = this.props;
return (
);
}
getControlType(): ControlType {
return "FILE_PICKER";
}
}
export interface FilePickerComponentState {
isOpen: boolean;
}
export type FilePickerControlProps = ControlProps;
export default FilePickerControl;