Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add update_title functionality to Dash for R #218

Merged
merged 6 commits into from
Jul 28, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,22 @@
All notable changes to `dash` will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

## [0.7.0] - 2020-07-28
### Added
- Dash for R now supports an `update_title` parameter, as in Dash for Python. [#218](https://github.com/plotly/dashR/pull/218)

### Changed
- `dash-renderer` updated to v1.6.0
- Dash for R now depends on v4.9.0 of `dashTable` (provides several fixes from [#806](https://github.com/plotly/dash-table/pull/806), [#808](https://github.com/plotly/dash-table/pull/808) and [#809](https://github.com/plotly/dash-table/pull/809)) and v1.10.2 of `dashCoreComponents` (which updates Plotly.js to 1.54.7 via [#835](https://github.com/plotly/dash-core-components/pull/835)).

### Removed
- Dash for R no longer produces a warning when callbacks with no IDs are declared; see [#216](https://github.com/plotly/dashR/pull/216).

## [0.6.3] - 2020-06-25
**Changed**
### Changed
- `dash-renderer` updated to v1.5.1

**Fixed**
### Fixed
- Resolves a regression that prevented multiple loading states from displaying concurrently when a callback updates multiple outputs (for more details, see [#1310](https://github.com/plotly/dash/pull/1310)).

## [0.6.2] - 2020-06-19
Expand Down
10 changes: 5 additions & 5 deletions DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
Package: dash
Title: An Interface to the Dash Ecosystem for Authoring Reactive Web Applications
Version: 0.6.3
Version: 0.7.0
Authors@R: c(person("Chris", "Parmer", role = c("aut"), email = "chris@plotly.com"), person("Ryan Patrick", "Kyle", role = c("aut", "cre"), comment = c(ORCID = "0000-0001-5829-9867"), email = "ryan@plotly.com"), person("Carson", "Sievert", role = c("aut"), comment = c(ORCID = "0000-0002-4958-2844")), person("Hammad", "Khan", role = c("aut"), email = "hammadkhan@plotly.com"), person(family = "Plotly Technologies", role = "cph"))
Description: A framework for building analytical web applications, Dash offers a pleasant and productive development experience. No JavaScript required.
Depends:
R (>= 3.0.2)
Imports:
dashHtmlComponents (== 1.0.3),
dashCoreComponents (== 1.10.1),
dashTable (== 4.8.1),
dashCoreComponents (== 1.10.2),
dashTable (== 4.9.0),
R6,
fiery (> 1.0.0),
routr (> 0.2.0),
Expand All @@ -33,8 +33,8 @@ Collate:
'print.R'
'internal.R'
Remotes: plotly/dash-html-components@e63acfa,
plotly/dash-core-components@5049379,
plotly/dash-table@9603c6c
plotly/dash-core-components@0770afb,
plotly/dash-table@75ac3d9
License: MIT + file LICENSE
Encoding: UTF-8
LazyData: true
Expand Down
19 changes: 13 additions & 6 deletions R/dash.R
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,16 @@ Dash <- R6::R6Class(
#' possible layout mis-specifications when registering a callback.
#' @param show_undo_redo Logical. Set to `TRUE` to enable undo and redo buttons for
#' stepping through the history of the app state.
#' @param update_title Character. Defaults to `Updating...`; configures the document.title
#' (the text that appears in a browser tab) text when a callback is being run.
#' Set to NULL or '' if you don't want the document.title to change or if you
#' want to control the document.title through a separate component or
#' clientside callback.
initialize = function(server = fiery::Fire$new(),
assets_folder = 'assets',
assets_url_path = '/assets',
assets_folder = "assets",
assets_url_path = "/assets",
eager_loading = FALSE,
assets_ignore = '',
assets_ignore = "",
serve_locally = TRUE,
meta_tags = NULL,
url_base_pathname = "/",
Expand All @@ -69,7 +74,8 @@ Dash <- R6::R6Class(
external_stylesheets = NULL,
compress = TRUE,
suppress_callback_exceptions = FALSE,
show_undo_redo = FALSE) {
show_undo_redo = FALSE,
update_title="Updating...") {

# argument type checking
assertthat::assert_that(inherits(server, "Fire"))
Expand All @@ -96,6 +102,7 @@ Dash <- R6::R6Class(
self$config$external_scripts <- external_scripts
self$config$external_stylesheets <- external_stylesheets
self$config$show_undo_redo <- show_undo_redo
self$config$update_title <- update_title

# ------------------------------------------------------------
# Initialize a route stack and register a static resource route
Expand Down Expand Up @@ -1669,7 +1676,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand All @@ -1687,7 +1694,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand Down
16 changes: 8 additions & 8 deletions R/internal.R
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js",
stylesheet = NULL,
Expand All @@ -48,9 +48,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js.map",
stylesheet = NULL,
Expand All @@ -60,9 +60,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js",
stylesheet = NULL,
Expand All @@ -72,9 +72,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js.map",
stylesheet = NULL,
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -34803,7 +34803,7 @@ var getLayoutCallbacks = function getLayoutCallbacks(graphs, paths, layout, opti
Exclusion of inputs happens when:
- an input is missing
- an input in the initial callback chain depends only on excluded inputs
Further execlusion might happen after callbacks return with:
Further exclusion might happen after callbacks return with:
- PreventUpdate
- no_update
*/
Expand Down Expand Up @@ -35507,7 +35507,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
* @param {string} location e.g. "prop", "context", "child context"
* @param {string} componentName Name of the component for error messages.
* @param {?Function} getStack Returns the component stack.
* @return {string} Any error messsage resulting from checking the types
* @return {string} Any error message resulting from checking the types
*/

function checkPropTypes(typeSpecs, values, location, componentName) {
Expand Down Expand Up @@ -35600,19 +35600,38 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
_classCallCheck(this, DocumentTitle);

_this = _super.call(this, props);
var update_title = props.config.update_title;
_this.state = {
initialTitle: document.title
title: document.title,
update_title: update_title
};
return _this;
}

_createClass(DocumentTitle, [{
key: "UNSAFE_componentWillReceiveProps",
value: function UNSAFE_componentWillReceiveProps(props) {
if (!this.state.update_title) {
// Let callbacks or other components have full control over title
return;
}

if (props.isLoading) {
document.title = 'Updating...';
this.setState({
title: document.title
});

if (this.state.update_title) {
document.title = this.state.update_title;
}
} else {
document.title = this.state.initialTitle;
if (document.title === this.state.update_title) {
document.title = this.state.title;
} else {
this.setState({
title: document.title
});
}
}
}
}, {
Expand All @@ -35631,11 +35650,15 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
}(react__WEBPACK_IMPORTED_MODULE_1__["Component"]);

DocumentTitle.propTypes = {
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired,
config: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({
update_title: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string
})
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(function (state) {
return {
isLoading: state.isLoading
isLoading: state.isLoading,
config: state.config
};
})(DocumentTitle));

Expand Down Expand Up @@ -38281,7 +38304,7 @@ var observer = {
return group.slice(0, -1);
}, Object(ramda__WEBPACK_IMPORTED_MODULE_0__["values"])(Object(ramda__WEBPACK_IMPORTED_MODULE_0__["groupBy"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["getUniqueIdentifier"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["concat"])(watched, requested)))));
/*
3. Modify or remove callbacks that are outputing to non-existing layout `id`.
3. Modify or remove callbacks that are outputting to non-existing layout `id`.
*/

var _pruneCallbacks = Object(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["pruneCallbacks"])(requested, paths),
Expand Down Expand Up @@ -38389,7 +38412,7 @@ var observer = {
// If there is no `stored` callback for the group, no outputs were dropped -> `cb` is kept
if (!cb.executionGroup || !pendingGroups[cb.executionGroup] || !pendingGroups[cb.executionGroup].length) {
return false;
} // Get all intputs for `cb`
} // Get all inputs for `cb`


var inputs = Object(ramda__WEBPACK_IMPORTED_MODULE_0__["map"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["combineIdAndProp"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["flatten"])(cb.getInputs(paths))); // Get all the potentially updated props for the group so far
Expand Down Expand Up @@ -39189,7 +39212,7 @@ var CallbackActionType;
CallbackActionType["RemoveBlocked"] = "Callbacks.RemoveBlocked";
CallbackActionType["RemoveExecuted"] = "Callbacks.RemoveExecuted";
CallbackActionType["RemoveExecuting"] = "Callbacks.RemoveExecuting";
CallbackActionType["RemovePrioritized"] = "Callbacks.ReomvePrioritized";
CallbackActionType["RemovePrioritized"] = "Callbacks.RemovePrioritized";
CallbackActionType["RemoveRequested"] = "Callbacks.RemoveRequested";
CallbackActionType["RemoveStored"] = "Callbacks.RemoveStored";
CallbackActionType["RemoveWatched"] = "Callbacks.RemoveWatched";
Expand Down

Large diffs are not rendered by default.

Loading