Display

Scheduler

lets(
    /* 基本變量 */
    開始時間, prop("Start Time").toNumber(),
    結束時間, prop("End Time").toNumber(),
    總時間, 結束時間 - 開始時間,
    
    /* 生成時間標籤 */
    時間標籤, "x".repeat(總時間).split("").map(index + 開始時間).concat([結束時間]),
    標籤最大長度, 時間標籤.max().length(),
    零零標籤, 時間標籤.map("0".repeat(標籤最大長度 - format(current).length()) + current),
    完整標籤, 零零標籤.map(current + ":00"), /* 時間標籤加上分鐘:00 */

    /* 計算各時間段的時長 */
    早晨結束, 12,  /* 早晨結束時間 */
    下午結束, 18,  /* 下午結束時間 */
    morn_hours, max(min(早晨結束, 結束時間) - 開始時間, 0),
    aft_hours, max(min(下午結束, 結束時間) - max(開始時間, 早晨結束), 0),
    eve_hours, max(結束時間 - max(開始時間, 下午結束), 0),

    /* 樣式化時間標籤 */
    標籤樣式, 完整標籤.map(
        ifs(/* 早晨藍色、下午橙色、晚上紫色 */
            morn_hours >= 0
	              and index + 1 <= morn_hours, current.style("blue_background"),
            aft_hours >= 0
                and index + 1 >= morn_hours 
                and index + 1 <= morn_hours + aft_hours, current.style("orange_background"),
            current.style("purple_background")
        )
    ),

    /* 分配任務至指定的時間標籤 */
    scheduled_labels, 標籤樣式.map(
        lets(
            n, current,
            n + " " + prop("Scheduler").filter(
                lets(
                    start, current.prop("Date & Time").dateStart().formatDate("HH").toNumber().toNumber(),
                    end, if(
	                      /* 如果結束時間不在整點,則四捨五入 */
                        current.prop("Date & Time").dateEnd().formatDate("mm").toNumber() > 0,
                        current.prop("Date & Time").dateEnd().formatDate("HH").toNumber() + 1,
                        current.prop("Date & Time").dateEnd().formatDate("HH")
                    ).toNumber(),
                    n.toNumber() >= start and n.toNumber() < end
                )
            )
        )
    ),
    /* 輸出結果 */
    scheduled_labels.join("\n")
)