|
@@ -0,0 +1,74 @@
|
|
|
+import $ from 'jquery';
|
|
|
+
|
|
|
+function createDocumentChooser(id) {
|
|
|
+ const chooserElement = $('#' + id + '-chooser');
|
|
|
+ const docTitle = chooserElement.find('.title');
|
|
|
+ const input = $('#' + id);
|
|
|
+ const editLink = chooserElement.find('.edit-link');
|
|
|
+ const chooserBaseUrl = chooserElement.data('chooserUrl');
|
|
|
+
|
|
|
+ /*
|
|
|
+ Construct initial state of the chooser from the rendered (static) HTML and arguments passed to
|
|
|
+ createDocumentChooser. State is either null (= no document chosen) or a dict of id, title and
|
|
|
+ edit_link.
|
|
|
+
|
|
|
+ The result returned from the document chooser modal (see get_document_result_data in
|
|
|
+ wagtail.documents.views.chooser) is a superset of this, and can therefore be passed directly to
|
|
|
+ chooser.setState.
|
|
|
+ */
|
|
|
+ let state = null;
|
|
|
+ if (input.val()) {
|
|
|
+ state = {
|
|
|
+ id: input.val(),
|
|
|
+ edit_link: editLink.attr('href'),
|
|
|
+ title: docTitle.text(),
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /* define public API functions for the chooser */
|
|
|
+ const chooser = {
|
|
|
+ getState: () => state,
|
|
|
+ getValue: () => state && state.id,
|
|
|
+ setState: (newState) => {
|
|
|
+ if (newState) {
|
|
|
+ input.val(newState.id);
|
|
|
+ docTitle.text(newState.title);
|
|
|
+ chooserElement.removeClass('blank');
|
|
|
+ editLink.attr('href', newState.edit_link);
|
|
|
+ } else {
|
|
|
+ input.val('');
|
|
|
+ chooserElement.addClass('blank');
|
|
|
+ }
|
|
|
+
|
|
|
+ state = newState;
|
|
|
+ },
|
|
|
+ openChooserModal: () => {
|
|
|
+ // eslint-disable-next-line no-undef, new-cap
|
|
|
+ ModalWorkflow({
|
|
|
+ url: chooserBaseUrl,
|
|
|
+ // eslint-disable-next-line no-undef
|
|
|
+ onload: DOCUMENT_CHOOSER_MODAL_ONLOAD_HANDLERS,
|
|
|
+ responses: {
|
|
|
+ documentChosen: (result) => {
|
|
|
+ chooser.setState(result);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ clear: () => {
|
|
|
+ chooser.setState(null);
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ $('.action-choose', chooserElement).on('click', () => {
|
|
|
+ chooser.openChooserModal();
|
|
|
+ });
|
|
|
+
|
|
|
+ $('.action-clear', chooserElement).on('click', () => {
|
|
|
+ chooser.clear();
|
|
|
+ });
|
|
|
+
|
|
|
+ return chooser;
|
|
|
+}
|
|
|
+window.createDocumentChooser = createDocumentChooser;
|