Веб-программист самоучка, занимаюсь этим с 2019 года, делаю как самописные сайты так и на WP, интернет-магазины всякие, блоги, лендинги и тд, из арсенала на данный момент, HTML / CSS / PHP / JavaScript / jQuery / GULP / WordPress / React / TypeScript, сейчас постигаю typescript и next.js
Контакты
Местоположение
Россия

Наибольший вклад в теги

Все теги (15)

Лучшие ответы пользователя

Все ответы (31)
  • Как сделать так чтобы в input нельзя было вводить меньше 5?

    @awenn2015
    Веб-программист самоучка
    Можно через событие onBlur валидировать

    const Input = () => {
      const range = { min: 5, max: 50 }
      const [value, setValue] = useState<number | "">(range.min)
    
      function onBlurHandle(value: number) {
        if (value >= range.min && value < range.max) return;
        setValue(range.min)
      }
    
      return (
        <input
          type="number"
          value={value}
          onChange={({ target }) => setValue(target.value === "" ? "" : +target.value)}
          onBlur={({ target }) => onBlurHandle(+target.value)}
          min={range.min}
          max={range.max}
        />
      )
    }
    Ответ написан
    Комментировать
  • Как добавить несколько get параметров в url без перезагрузки страницы?

    @awenn2015
    Веб-программист самоучка
    Понимаю что поздно но мне тоже нужна была похожая штука, так что я смастерил это

    const url = new URL(window.location.href)
    url.searchParams.append("afterSending", "1")
    window.history.pushState(null, null, url);
    
    // window.location.href = url.toString()
    // window.location.replace(url.toString())
    Ответ написан
    Комментировать
  • Как передать значение переменной между файлами шаблона на wordpress?

    @awenn2015
    Веб-программист самоучка
    Смотрю вот ответы то хорошие, но что делать когда файл шаблона, например файл со script тегом который мы через хук wp_footer цепляем к странице, что бы не дублировать запросы к бд хорошей идей является как упомянул Mario62 передавать данные через $GLOBALS
    Ответ написан
    Комментировать
  • Как сделать чтобы Заголовок и задача были один под одним?

    @awenn2015
    Веб-программист самоучка
    Имеешь ввиду одной ширины что ли ? Добавь классы и дай одну ширину, можно конечно с bootstrap поиграть а можно нативно flexами задать
    Ответ написан
    1 комментарий
  • Как реализовать вращение массива?

    @awenn2015
    Веб-программист самоучка
    Если кто-то будет гуглить и не найдет для себя ответа на вопрос, то вот универсальная реализация, перемещение элемента со смещением соседей по индексам whom и where, может быть полезно в ui где с помощью drag&drop перемещаются элементы в списке или карточки, для вывода сортируясь по полю order

    interface Todo {
      id: number
      order: number
      title: string
    }
    
    interface Test {
      whom: number
      where: number
      expected: number[]
    }
    
    const data: Todo[] = [
      { id: 1, order: 1, title: 'delectus aut autem' },
      { id: 2, order: 2, title: 'quis ut nam facilis et officia qui' },
      { id: 3, order: 3, title: 'fugiat veniam minus' },
      { id: 4, order: 4, title: 'et porro tempora' },
      { id: 5, order: 5, title: 'laboriosam mollitia et enim quasi adipisci quia provident illum' },
      { id: 6, order: 6, title: 'qui ullam ratione quibusdam voluptatem quia omnis' },
      { id: 7, order: 7, title: 'illo expedita consequatur quia in' },
      { id: 8, order: 8, title: 'quo adipisci enim quam ut ab' },
      { id: 9, order: 9, title: 'molestiae perspiciatis ipsa' },
      { id: 10, order: 10, title: 'illo est ratione doloremque quia maiores aut' },
    ]
    
    function swapTodos(todos: Todo[], whom: number, where: number) {
      if (whom === where) return todos
    
      const result = (() => {
        if (whom < where) {
          const start = todos.slice(0, whom)
          const neighbors = todos.slice(whom + 1, where + 1)
          const tail = todos.slice(where + 1, todos.length)
    
          return [...start, ...neighbors, todos[whom], ...tail]
        } else {
          const start = todos.slice(0, where)
          const neighbors = todos.slice(where, whom)
          const tail = todos.slice(whom + 1, todos.length)
    
          return [...start, todos[whom], ...neighbors, ...tail]
        }
      })()
    
      return result.map((it, i) => ({ ...it, order: i + 1 }))
    }
    
    const tests: Test[] = [
      { whom: 1, where: 5, expected: [1, 3, 4, 5, 6, 2, 7, 8, 9, 10] },
      { whom: 0, where: 9, expected: [2, 3, 4, 5, 6, 7, 8, 9, 10, 1] },
      { whom: 4, where: 9, expected: [1, 2, 3, 4, 6, 7, 8, 9, 10, 5] },
      { whom: 8, where: 3, expected: [1, 2, 3, 9, 4, 5, 6, 7, 8, 10] },
      { whom: 9, where: 0, expected: [10, 1, 2, 3, 4, 5, 6, 7, 8, 9] },
      { whom: 9, where: 4, expected: [1, 2, 3, 4, 10, 5, 6, 7, 8, 9] },
    ]
    
    function runTests() {
      console.log('-----------------')
    
      for (const [i, { expected: expect, whom, where }] of tests.entries()) {
        console.log(`[Test ${i + 1} start]`)
    
        const result = swapTodos(data, whom, where)
        const compare = result.map((it) => it.id)
    
        if (JSON.stringify(compare) !== JSON.stringify(expect)) {
          console.warn(`[Test ${i + 1} failed]: Результат не соответствует тому что ожидалось`)
          console.log('Result => ', JSON.stringify(compare))
          console.log('Expected => ', JSON.stringify(expect))
        } else {
          console.log(`[Test ${i + 1} passed]: Тест успешно пройден`)
        }
    
        console.log('-----------------')
      }
    }
    
    export default runTests


    Ps: Обновление сортировки было моим личным требованием, если нужно можно убрать
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (37)