Skip to content

Commit

Permalink
airDatepickerInput: added disabledDaysOfWeek argument
Browse files Browse the repository at this point in the history
  • Loading branch information
pvictor committed Feb 23, 2023
1 parent f37e59a commit e0035be
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 15 deletions.
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: shinyWidgets
Title: Custom Inputs Widgets for Shiny
Version: 0.7.6.9200
Version: 0.7.6.9100
Authors@R: c(
person("Victor", "Perrier", email = "[email protected]", role = c("aut", "cre", "cph")),
person("Fanny", "Meyer", role = "aut"),
Expand Down
3 changes: 3 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
shinyWidgets 0.7.7
======================

* `airDatepickerInput()` : added argument `disabledDaysOfWeek` to disable day(s) of the week.


### Bug fixes

* `verticalTabsetPanel()` does not render output content when using Bootstrap 5 [#570](https://github.com/dreamRs/shinyWidgets/issues/570).
Expand Down
9 changes: 6 additions & 3 deletions R/input-airDatepicker.R
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#' @param minDate The minimum allowed date. Either a Date object, or a string in \code{yyyy-mm-dd} format.
#' @param maxDate The maximum allowed date. Either a Date object, or a string in \code{yyyy-mm-dd} format.
#' @param disabledDates A vector of dates to disable, e.g. won't be able to select one of dates passed.
#' @param disabledDaysOfWeek Day(s) of week to disable, numbers from 0 (Sunday) to 6 (Saturday).
#' @param highlightedDates A vector of dates to highlight.
#' @param view Starting view, one of \code{'days'} (default), \code{'months'} or \code{'years'}.
#' @param startView Date shown in calendar when date picker is opened.
Expand Down Expand Up @@ -116,6 +117,7 @@ airDatepickerInput <- function(inputId,
minDate = NULL,
maxDate = NULL,
disabledDates = NULL,
disabledDaysOfWeek = NULL,
highlightedDates = NULL,
view = c("days", "months", "years"),
startView = NULL,
Expand All @@ -127,12 +129,12 @@ airDatepickerInput <- function(inputId,
timepickerOpts = timepickerOptions(),
position = NULL,
update_on = c("change", "close"),
onlyTimepicker = FALSE,
toggleSelected = TRUE,
addon = c("right", "left", "none"),
language = "en",
inline = FALSE,
onlyTimepicker = FALSE,
width = NULL,
toggleSelected = TRUE) {
width = NULL) {
value <- shiny::restoreInput(inputId, value)
addon <- match.arg(addon)
# dput(tools::file_path_sans_ext(list.files("node_modules/air-datepicker/locale/", pattern = "\\.js")))
Expand Down Expand Up @@ -168,6 +170,7 @@ airDatepickerInput <- function(inputId,
airParams <- dropNulls(list(
updateOn = match.arg(update_on),
disabledDates = list1(disabledDates),
disabledDaysOfWeek = list1(disabledDaysOfWeek),
highlightedDates = list1(highlightedDates),
startView = startView,
value = list1(value),
Expand Down
2 changes: 1 addition & 1 deletion inst/packer/air-datepicker.js

Large diffs are not rendered by default.

17 changes: 10 additions & 7 deletions man/airDatepicker.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 16 additions & 3 deletions srcjs/inputs/air-datepicker.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ function as_date(date) {
return dayjs(date).toDate();
}

function onRenderCell(disabledDates, highlightedDates) {
function onRenderCell(disabledDates, disabledDaysOfWeek, highlightedDates) {
return ({ date, cellType, datepicker }) => {
if (cellType == "day") {
var disabled = false,
Expand All @@ -110,6 +110,10 @@ function onRenderCell(disabledDates, highlightedDates) {
return date == formatted;
}).length;

if (disabledDaysOfWeek.includes(dayjs(date).day())) {
disabled = true;
}

highlighted = highlightedDates.filter(function(date) {
return date == formatted;
}).length;
Expand Down Expand Up @@ -174,11 +178,15 @@ $.extend(AirDatepickerBindings, {
if (config.hasOwnProperty("disabledDates")) {
disabledDates = config.disabledDates;
}
var disabledDaysOfWeek = [];
if (config.hasOwnProperty("disabledDaysOfWeek")) {
disabledDaysOfWeek = config.disabledDaysOfWeek;
}
var highlightedDates = [];
if (config.hasOwnProperty("highlightedDates")) {
highlightedDates = config.highlightedDates;
}
options.onRenderCell = onRenderCell(disabledDates, highlightedDates);
options.onRenderCell = onRenderCell(disabledDates, disabledDaysOfWeek, highlightedDates);

if (config.updateOn == "close") {
options.onHide = function(isFinished) {
Expand Down Expand Up @@ -277,17 +285,22 @@ $.extend(AirDatepickerBindings, {

if (
options.hasOwnProperty("disabledDates") |
options.hasOwnProperty("disabledDaysOfWeek") |
options.hasOwnProperty("highlightedDates")
) {
var disabledDates = [];
if (options.hasOwnProperty("disabledDates")) {
disabledDates = options.disabledDates;
}
var disabledDaysOfWeek = [];
if (options.hasOwnProperty("disabledDaysOfWeek")) {
disabledDaysOfWeek = options.disabledDaysOfWeek;
}
var highlightedDates = [];
if (options.hasOwnProperty("highlightedDates")) {
highlightedDates = options.highlightedDates;
}
options.onRenderCell = onRenderCell(disabledDates, highlightedDates);
options.onRenderCell = onRenderCell(disabledDates, disabledDaysOfWeek, highlightedDates);
}

dp.update(options);
Expand Down

0 comments on commit e0035be

Please sign in to comment.