Задать вопрос
  • Как сделать другого цвета выбранный диапазон в календаре?

    @Eugene_Zhukov
    Front
    Если не хочешь использовать date-picker из какого-нибудь фрейма то как сделать свой:
    ps. если очень не любишь ; то привыкай, сложно понять где что закончилось именно на хабре

    let startDate = null;
    let endDate = null;
    
    // в updateInput добавь
    for (let i = 0; i < monthDetails.length; i++) {
                        if (monthDetails[i].month === 0) {
                            if (monthDetails[i].date.toString() === cell_date) {
                                // для проверки рейнджа
                                if (!startDate || (startDate && endDate)) {
                                    // На первый клик или новый рейндж
                                    clearSelection();
                                    startDate = monthDetails[i].timestamp;
                                    cell.classList.add("isSelected");
                                } else {
                                    // Второй клик
                                    endDate = monthDetails[i].timestamp;
                                    highlightRange();
                                }
                            }
                        }
                    }
    
    //хелперы
    const clearSelection = () => {
        startDate = null;
        endDate = null;
        document.querySelectorAll(".cell_wrapper").forEach(cell => {
            cell.classList.remove("isSelected", "inRange");
        });
    };
    
    const highlightRange = () => {
        if (startDate > endDate) {
            [startDate, endDate] = [endDate, startDate];
        }
    
        document.querySelectorAll(".cell_wrapper").forEach(cell => {
            if (cell.classList.contains("current")) {
                const cellDate = new Date(year, month, parseInt(cell.textContent)).getTime();
                
                if (cellDate === startDate || cellDate === endDate) {
                    cell.classList.add("isSelected");
                } else if (cellDate > startDate && cellDate < endDate) {
                    cell.classList.add("inRange");
                }
            }
        });
    };

    у меня работает, большая часть логики отсюда vueDatePicker , как-то раз очень пригодилось
    .cell_wrapper.inRange {
        background-color: #f0f0f0;
        color: #272727;
    }
    
    .cell_wrapper.current.inRange {
        background-color: #e0e0e0;
        border-radius: 0;
    }
    
    .cell_wrapper.isSelected {
        border-radius: 50%;
        background-color: #272727;
        color: #fff;
    }
    Ответ написан
    Комментировать
  • Telegram web app, как открыть нативный попап с полем ввода (promt)?

    @Eugene_Zhukov Автор вопроса
    Front
    Ужас какой-то, почему сразу не попробовал
    ТГ не предоставляет такой метод как promt, это нативный js promt...
    Ответ написан
    Комментировать
  • Как сделать что таймер не сбрасывался а продолжал работать?

    @Eugene_Zhukov
    Front
    я не спец на реакте, больше во vue разбираюсь
    но тут 2 варианта либо localStorage, либо date.now()

    первый вариант сложно расписать, поэтому извини)

    но второй я использовал примерно вот так
    handleStart = (event) => {
      event?.stopPropagation();
      const startTime = Date.now();
      const { min, sec } = this.state;
      this.setState({ 
        isCounting: true, 
        startTime,
        remainingTime: min * 60 + sec 
      });
    
      this.counterID = setInterval(() => {
        const elapsedTime = Math.floor((Date.now() - startTime) / 1000);
        const remainingTime = Math.max(0, this.state.remainingTime - elapsedTime);
        const newMin = Math.floor(remainingTime / 60);
        const newSec = remainingTime % 60;
    
        this.setState({ min: newMin, sec: newSec });
        
        if (remainingTime === 0) {
          this.handlePause();
          this.props.onCheckBoxClick();
        }
      }, 1000);
    };


    Не забудь очищать, не помню как в реакте точно это называлось componentwillUnmount что-ли ()=>{clearInterval(this.counterIdD)}
    Ответ написан