mirror of
https://github.com/IgnatZakalinsky/home-works.git
synced 2026-01-31 04:52:06 +00:00
add prettier and reformat all files
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import React, {useState} from 'react'
|
||||
import React, { useState } from 'react'
|
||||
import SuperEditableSpan from './common/c4-SuperEditableSpan/SuperEditableSpan'
|
||||
import {restoreState, saveState} from './localStorage/localStorage'
|
||||
import { restoreState, saveState } from './localStorage/localStorage'
|
||||
import s2 from '../../s1-main/App.module.css'
|
||||
import SuperButton from '../hw04/common/c2-SuperButton/SuperButton'
|
||||
|
||||
@@ -10,13 +10,14 @@ const HW6 = () => {
|
||||
const save = () => {
|
||||
saveState<string>('hw6-editable-span-value', value)
|
||||
}
|
||||
const restore = () => { // делают студенты
|
||||
const restore = () => {
|
||||
// делают студенты
|
||||
setValue(restoreState<string>('hw6-editable-span-value', ''))
|
||||
}
|
||||
|
||||
return (
|
||||
<div id={'hw6'} className={s2.hw}>
|
||||
<hr/>
|
||||
<hr />
|
||||
{/*можно убрать этот тег*/}
|
||||
|
||||
<div className={s2.hwTitle}>homeworks 6</div>
|
||||
@@ -27,15 +28,22 @@ const HW6 = () => {
|
||||
id={'hw6-spanable-input'}
|
||||
value={value}
|
||||
onChangeText={setValue}
|
||||
spanProps={{children: value ? undefined : 'enter text...', id: 'hw6-editable-span'}}
|
||||
spanProps={{
|
||||
children: value ? undefined : 'enter text...',
|
||||
id: 'hw6-editable-span',
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<SuperButton id={'hw6-save'} onClick={save}>save to ls</SuperButton>
|
||||
<SuperButton id={'hw6-restore'} onClick={restore}>get from ls</SuperButton>
|
||||
<SuperButton id={'hw6-save'} onClick={save}>
|
||||
save to ls
|
||||
</SuperButton>
|
||||
<SuperButton id={'hw6-restore'} onClick={restore}>
|
||||
get from ls
|
||||
</SuperButton>
|
||||
|
||||
<hr/>
|
||||
<hr />
|
||||
{/*можно убрать этот тег*/}
|
||||
<hr/>
|
||||
<hr />
|
||||
{/*можно убрать этот тег*/}
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -6,4 +6,4 @@
|
||||
|
||||
cursor: pointer;
|
||||
color: #77aaff;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,27 @@
|
||||
import React, {DetailedHTMLProps, InputHTMLAttributes, HTMLAttributes, useState} from 'react'
|
||||
import React, {
|
||||
DetailedHTMLProps,
|
||||
InputHTMLAttributes,
|
||||
HTMLAttributes,
|
||||
useState,
|
||||
} from 'react'
|
||||
import s from './SuperEditableSpan.module.css'
|
||||
import SuperInputText from '../../../hw04/common/c1-SuperInputText/SuperInputText'
|
||||
|
||||
// тип пропсов обычного инпута
|
||||
type DefaultInputPropsType = DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>
|
||||
type DefaultInputPropsType = DetailedHTMLProps<
|
||||
InputHTMLAttributes<HTMLInputElement>,
|
||||
HTMLInputElement
|
||||
>
|
||||
// тип пропсов обычного спана
|
||||
type DefaultSpanPropsType = DetailedHTMLProps<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>
|
||||
type DefaultSpanPropsType = DetailedHTMLProps<
|
||||
HTMLAttributes<HTMLSpanElement>,
|
||||
HTMLSpanElement
|
||||
>
|
||||
|
||||
// здесь мы говорим что у нашего инпута будут такие же пропсы как у обычного инпута, кроме type
|
||||
// (чтоб не писать value: string, onChange: ...; они уже все описаны в DefaultInputPropsType)
|
||||
type SuperEditableSpanType = Omit<DefaultInputPropsType, 'type'> & { // и + ещё пропсы которых нет в стандартном инпуте
|
||||
type SuperEditableSpanType = Omit<DefaultInputPropsType, 'type'> & {
|
||||
// и + ещё пропсы которых нет в стандартном инпуте
|
||||
onChangeText?: (value: string) => void
|
||||
onEnter?: () => void
|
||||
error?: string
|
||||
@@ -17,18 +29,17 @@ type SuperEditableSpanType = Omit<DefaultInputPropsType, 'type'> & { // и + е
|
||||
spanProps?: DefaultSpanPropsType // пропсы для спана
|
||||
}
|
||||
|
||||
const SuperEditableSpan: React.FC<SuperEditableSpanType> = (
|
||||
{
|
||||
autoFocus,
|
||||
onBlur,
|
||||
onEnter,
|
||||
spanProps,
|
||||
const SuperEditableSpan: React.FC<SuperEditableSpanType> = ({
|
||||
autoFocus,
|
||||
onBlur,
|
||||
onEnter,
|
||||
spanProps,
|
||||
|
||||
...restProps// все остальные пропсы попадут в объект restProps
|
||||
}
|
||||
) => {
|
||||
...restProps // все остальные пропсы попадут в объект restProps
|
||||
}) => {
|
||||
const [editMode, setEditMode] = useState<boolean>(false)
|
||||
const {children, onDoubleClick, className, ...restSpanProps} = spanProps || {}
|
||||
const { children, onDoubleClick, className, ...restSpanProps } =
|
||||
spanProps || {}
|
||||
|
||||
const onEnterCallback = () => {
|
||||
setEditMode(false) // выключить editMode при нажатии Enter // делают студенты
|
||||
@@ -40,7 +51,9 @@ const SuperEditableSpan: React.FC<SuperEditableSpanType> = (
|
||||
|
||||
onBlur?.(e)
|
||||
}
|
||||
const onDoubleClickCallBack = (e: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {
|
||||
const onDoubleClickCallBack = (
|
||||
e: React.MouseEvent<HTMLSpanElement, MouseEvent>
|
||||
) => {
|
||||
setEditMode(true) // включить editMode при двойном клике // делают студенты
|
||||
|
||||
onDoubleClick?.(e)
|
||||
@@ -50,27 +63,23 @@ const SuperEditableSpan: React.FC<SuperEditableSpanType> = (
|
||||
|
||||
return (
|
||||
<>
|
||||
{editMode
|
||||
? (
|
||||
<SuperInputText
|
||||
autoFocus={autoFocus || true}
|
||||
onBlur={onBlurCallback}
|
||||
onEnter={onEnterCallback}
|
||||
|
||||
{...restProps} // отдаём инпуту остальные пропсы если они есть (value например там внутри)
|
||||
/>
|
||||
) : (
|
||||
<span
|
||||
onDoubleClick={onDoubleClickCallBack}
|
||||
className={spanClassName}
|
||||
|
||||
{...restSpanProps}
|
||||
>
|
||||
{/*если нет захардкодженного текста для спана, то значение инпута*/}
|
||||
✎ {children || restProps.value}
|
||||
</span>
|
||||
)
|
||||
}
|
||||
{editMode ? (
|
||||
<SuperInputText
|
||||
autoFocus={autoFocus || true}
|
||||
onBlur={onBlurCallback}
|
||||
onEnter={onEnterCallback}
|
||||
{...restProps} // отдаём инпуту остальные пропсы если они есть (value например там внутри)
|
||||
/>
|
||||
) : (
|
||||
<span
|
||||
onDoubleClick={onDoubleClickCallBack}
|
||||
className={spanClassName}
|
||||
{...restSpanProps}
|
||||
>
|
||||
{/*если нет захардкодженного текста для спана, то значение инпута*/}
|
||||
✎ {children || restProps.value}
|
||||
</span>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ type StateType = {
|
||||
}
|
||||
|
||||
// сохраняем объект типа StateType в ячейке 'test'
|
||||
saveState<StateType>('test', {x: 'A', y: 1})
|
||||
saveState<StateType>('test', { x: 'A', y: 1 })
|
||||
|
||||
// получем в переменную state объект из ячейки 'test' или дэфолтный объект если ячейка пуста
|
||||
const state: StateType = restoreState<StateType>('test', {x: '', y: 0})
|
||||
const state: StateType = restoreState<StateType>('test', { x: '', y: 0 })
|
||||
|
||||
Reference in New Issue
Block a user