January 27, 2024

Календарь событий One Way

Календарь событий умеет показывать события с расписания GetCourse, отрисовывать разные иконки в зависимости от события, добавлять события в Google и Apple календари и интегрируется с Google - таблицами для удобного администрирования событий

Для настройки календаря перейдите в "настроить вид"

Найдите блок календаря и щелкните дважды левой кнопкой мыши

window.OneWaySchedule = true;

Этот параметр отвечает за события с расписания. Измените параметр true на false, чтобы календарь не брал уроки с расписания

window.OneWayExcel = 'Ссылка'

Этот параметр отвечает за интеграцию с таблицами. Для того, чтобы подключить таблицу, вам понадобится доступ к специальной таблице и особая ссылка на нее.

Скопируйте таблицу

https://docs.google.com/spreadsheets/d/1IW0zfmYvonoAPjj2RccS-NZQL8b8jAIjGBCSw5Lnuqc/edit#gid=0

После копирования перейдите в AppScript

В AppScript начните развертывание, нажав на "новое развертывание"

Не меняйте предлагаемые настройки. Доступ должен быть от вашего имени и доступен всем

Согласитесь на запуск. Веб-приложение запрашивает доступ к вашей учетной записи google. Это безопасно, но вы можете использовать новый аккаунт google для использования таблиц

На этом этапе нажмите "show Advanced => go to json"

Затем нажмите allow.

Вам выдаст вашу специальную ссылку на таблицу

По этой ссылке никто не сможет перейти в вашу таблицу, но при переходе по ней сервер таблиц будет отдавать нам события. Скопируйте ссылку на веб-приложение. Также эту ссылку вы всегда сможете найти в AppScript в разделе "управление развертываниями".

Вставьте ссылку в код календаря. Не удалите кавычки, в которых должна быть ссылка

В самой таблице заполняйте события как было в таблице-примере.

Вставив в последнее поле group/black/closed, вы можете делать нестандартные иконки событий

Update: ограничение расписания по тренингу

Теперь в календаре можно ограничивать расписание из геткурса, показывая только события текущего тренинга. Для этого нужно добавить в коде календаря строку

window.OneWayThisTraining = true

Сразу после этого он начнет проверять родительский тренинг уроков

Альтернативное расписание уроков GC

Вы можете подключить извлечение уроков с Chatium, а не с Расписания GetCourse. В этом случае функция window.OneWayThisTraining будет работать точнее, поскольку будет сравнивать не имена тренингов, а ID. Если у вас в школе много тренингов с одинаковыми названиями, имеет смысл использовать этот способ

  1. Дополнительно перейдите по адресу *вашдомен*/chtm/s/ide/

3. Добавьте директорию remakeCalendarAPI

4. Добавьте файл app.tsx

5. Добавьте код нового API и сохраните файл

import { getScheduleByEmail } from '@getcourse/sdk'
import { compareAsc, differenceInDays, endOfDay, isAfter, isBefore, parse, set, startOfDay } from '@npm/date-fns'
import { utcToZonedTime } from '@npm/date-fns-tz'
  export function sortedSchedule(scheduleData: any) {
  const now = utcToZonedTime(new Date(), ctx.timeZone)

  return scheduleData
    .filter(item => {
      const itemDate = parse(item.start_at, 'yyyy-MM-dd HH:mm:ss', new Date())
      return isAfter(itemDate, now)
    })
    .sort((a, b) => {
      const dateA = parse(a.start_at, 'yyyy-MM-dd HH:mm:ss', new Date())
      const dateB = parse(b.start_at, 'yyyy-MM-dd HH:mm:ss', new Date())
      return compareAsc(dateA, dateB)
    })
}
app.get('/', async (ctx,req)=>{

const scheduleData: any =
    ctx.user?.confirmedEmail !== 'demo@chatium.io'
      ? await getScheduleByEmail(ctx, ctx.user?.confirmedEmail as string)
      : null
return scheduleData
})

6. Замените переменную: window.OneWaySchedule = 'chatium'

Теперь расписание будет браться с раздела Chatium по самому современному доступному способу: https://chatium.ru/docs/getcourse/getScheduleByEmail