@rpcbase/client 0.197.0-fileupload.0 → 0.198.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,8 @@
1
1
  import Promise from "bluebird"
2
- import { ReactNode } from "react"
2
+ import {ReactNode} from "react"
3
3
  import debug from "debug"
4
- import { createContext, useContext, useState, useRef, useEffect } from "react"
4
+ import {createContext, useContext, useState, useRef, useEffect} from "react"
5
5
 
6
- // import complete_upload from "rpc!server/items/drives/files/complete_upload";
7
6
  import {EVENTS, UPLOAD_MAX_CONCURRENCY} from "./constants"
8
7
 
9
8
 
@@ -64,9 +63,9 @@ export const FileUploadContextProvider = ({
64
63
  new URL("./upload-worker/index.js", import.meta.url),
65
64
  )
66
65
 
67
- const onMessage = async({ data }) => {
66
+ const onMessage = async({data}) => {
68
67
  log("worker message:", data)
69
- const { type, payload } = data
68
+ const {type, payload} = data
70
69
 
71
70
  if (type === EVENTS.UPLOAD_COMPLETE) {
72
71
  const {filename, hash} = payload
@@ -119,7 +118,10 @@ export const FileUploadContextProvider = ({
119
118
  }
120
119
  })
121
120
 
122
- await Promise.map(getUploadFiles(), startUploadAndWait, {concurrency: UPLOAD_MAX_CONCURRENCY})
121
+ await Promise.map(
122
+ getUploadFiles(), startUploadAndWait,
123
+ {concurrency: UPLOAD_MAX_CONCURRENCY}
124
+ )
123
125
 
124
126
  if (typeof onUploadComplete === "function") {
125
127
  await onUploadComplete(getUploadFiles())
@@ -17,7 +17,9 @@ const STATUS_MESSAGES = {
17
17
  }
18
18
 
19
19
  const FileUploadForm = () => {
20
- const {workerRef, selectedFiles, setSelectedFiles, processedFiles, updateProcessedFile} = useFileUploadContext()
20
+ const {workerRef,
21
+ selectedFiles,
22
+ setSelectedFiles, processedFiles, updateProcessedFile} = useFileUploadContext()
21
23
 
22
24
  usePreventUnload()
23
25
 
@@ -119,8 +121,8 @@ const FileUploadForm = () => {
119
121
  role="progressbar"
120
122
  style={{width: `${progress}%`}}
121
123
  aria-valuenow={progress}
122
- aria-valuemin="0"
123
- aria-valuemax="100"
124
+ aria-valuemin={0}
125
+ aria-valuemax={100}
124
126
  />
125
127
  </div>
126
128
  <div className="ms-2 text-secondary">{progress}&nbsp;%</div>
@@ -1,11 +1,11 @@
1
- import { FileUploadContextProvider } from "./FileUploadContext"
1
+ import {FileUploadContextProvider} from "./FileUploadContext"
2
2
  import FileUploadForm from "./FileUploadForm"
3
3
  import {UploadButton} from "./UploadButton"
4
4
 
5
- import "./file-upload.scss"
5
+ import "./file-input.scss"
6
6
 
7
7
 
8
- export const FileUpload = ({
8
+ export const FileInput = ({
9
9
  onUploadComplete,
10
10
  }: {
11
11
  onUploadComplete?: (files: any) => void | Promise<void>
@@ -4,6 +4,7 @@ import get_file_hash from "./get_file_hash"
4
4
 
5
5
  import {EVENTS} from "../constants"
6
6
 
7
+
7
8
  self.onmessage = ({data: {file, type, hash}}) => {
8
9
  if (type === EVENTS.BEGIN_HASH) {
9
10
  get_file_hash(file)
@@ -94,7 +94,9 @@ const upload_file = async(file, hash) => {
94
94
 
95
95
  current_chunks_count++
96
96
 
97
- log(`upload chunks ${current_chunks_count} chunk // ${total_bytes_read} total_bytes_read...`)
97
+ log(
98
+ `upload chunks ${current_chunks_count} chunk // ${total_bytes_read} total_bytes_read...`
99
+ )
98
100
 
99
101
  // there are more bytes to be read
100
102
  if (total_bytes_read < size) {
package/form/Form.tsx ADDED
@@ -0,0 +1,23 @@
1
+ import {FormProvider, SubmitHandler, UseFormReturn} from "react-hook-form"
2
+
3
+
4
+ type FormProps = {
5
+ ref?: React.Ref<HTMLFormElement>;
6
+ children: React.ReactNode;
7
+ onSubmit: SubmitHandler<any>;
8
+ className?: string;
9
+ form: UseFormReturn<any>;
10
+ }
11
+
12
+ export const Form = ({ref, children, onSubmit, className = "", ...form}: FormProps) => {
13
+
14
+ // const/*"needs-validation"*/
15
+
16
+ return (
17
+ <FormProvider {...form}>
18
+ <form ref={ref} onSubmit={onSubmit} className={cx(className)} noValidate>
19
+ {children}
20
+ </form>
21
+ </FormProvider>
22
+ )
23
+ }
package/form/Input.tsx ADDED
@@ -0,0 +1,61 @@
1
+ import React from "react"
2
+ // import {NestedKeyOf} from "@rpcbase/client/types"
3
+ import _get from "lodash/get"
4
+ import {useFormContext} from "./hook-form"
5
+
6
+
7
+ type NestedKeys<T> = {
8
+ [K in keyof T & (string | number)]: T[K] extends object
9
+ ? `${K}` | `${K}.${NestedKeys<T[K]>}`
10
+ : `${K}`;
11
+ }[keyof T & (string | number)];
12
+
13
+
14
+ export type InputProps<T> = {
15
+ field: NestedKeys<T>;
16
+ label?: string;
17
+ hint?: string;
18
+ placeholder?: string;
19
+ id?: string;
20
+ disabled?: boolean;
21
+ className?: string;
22
+ }
23
+
24
+ export const Input = <T,>({
25
+ field,
26
+ label,
27
+ hint,
28
+ placeholder,
29
+ id: idProp,
30
+ className,
31
+ disabled: isDisabled,
32
+ ...props
33
+ }: InputProps<T> & React.InputHTMLAttributes<HTMLInputElement>) => {
34
+ const form = useFormContext()
35
+
36
+ const id = idProp || `input-${field}`
37
+
38
+ const error = _get(form.formState.errors, field)
39
+
40
+ const {isSubmitting} = form.formState
41
+
42
+ const disabled = isDisabled || isSubmitting
43
+
44
+ return (
45
+ <div className={className}>
46
+ {label && <label htmlFor={id}>{label}</label>}
47
+ <input
48
+ id={id}
49
+ className={cx("form-control form-control-sm", {
50
+ "is-invalid": !!error,
51
+ })}
52
+ type="text"
53
+ placeholder={placeholder}
54
+ disabled={disabled}
55
+ {...form.register(field)}
56
+ />
57
+ {!error && hint && <div className="form-text">{hint}</div>}
58
+ {error && <div className="invalid-feedback">{error.message}</div>}
59
+ </div>
60
+ )
61
+ }
@@ -1,7 +1,7 @@
1
1
  import {ReactNode} from "react"
2
2
  import {useFormContext} from "react-hook-form"
3
3
 
4
- import ActivityIndicator from "../ActivityIndicator"
4
+ import ActivityIndicator from "../../ui/ActivityIndicator"
5
5
 
6
6
 
7
7
  interface Props {
@@ -0,0 +1,7 @@
1
+
2
+
3
+ import {useForm, useFormContext} from "react-hook-form"
4
+ import type {Resolver} from "react-hook-form"
5
+
6
+
7
+ export {useForm, useFormContext, Resolver}
package/form/index.tsx ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./hook-form"
2
+ export * from "./Form"
3
+ export * from "./Input"
4
+ export * from "./FileInput"
5
+ export * from "./SubmitButton"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/client",
3
- "version": "0.197.0-fileupload.0",
3
+ "version": "0.198.0",
4
4
  "scripts": {
5
5
  "build": "../../node_modules/.bin/wireit",
6
6
  "test": "../../node_modules/.bin/wireit"
@@ -1,53 +0,0 @@
1
- import ActivityIndicator from "../ActivityIndicator"
2
- import Modal from "../Modal"
3
-
4
- import {FileUploadContextProvider} from "./FileUploadContext"
5
- import FileUploadForm from "./FileUploadForm"
6
- import UploadButton from "./UploadButton"
7
-
8
- import "./file-upload.scss"
9
-
10
-
11
- // TODO: option to disable compression
12
-
13
- export const FileUploadModal = ({onHide}) => {
14
- const isLoading = false
15
-
16
- const onHideFn = () => null
17
-
18
- return (
19
- <FileUploadContextProvider>
20
- <Modal className="file-upload-modal" show scrollable={true} onHide={onHideFn}>
21
- <Modal.Header className="close-top" closeButton>
22
- <img
23
- width={22}
24
- height={22}
25
- className="me-2 align-self-start mt-1"
26
- src={`/static/icons/drive/file-upload-s.svg`}
27
- />
28
- <div>
29
- <div>File Upload</div>
30
- <small className="text-secondary fw-normal">Upload any type of file, any size.</small>
31
- </div>
32
- </Modal.Header>
33
- <Modal.Body className="py-2">
34
- {isLoading && (
35
- <div className="d-flex flex-row align-items-center">
36
- <ActivityIndicator size={24} />
37
- <div className="ms-2">Loading text...</div>
38
- </div>
39
- )}
40
-
41
- <FileUploadForm />
42
- </Modal.Body>
43
- <Modal.Footer className="d-flex justify-content-between">
44
- <div>
45
- <a href="/docs/drives">/docs/drives</a>
46
- </div>
47
-
48
- <UploadButton />
49
- </Modal.Footer>
50
- </Modal>
51
- </FileUploadContextProvider>
52
- )
53
- }
File without changes