11document . addEventListener ( 'DOMContentLoaded' , ( ) => {
22 /**
3- * Clears subscription qualifier field value
4- * @returns {void }
3+ * Extracts qualifier type from the field's dataset
4+ * @returns {string | null }
55 */
6- const clearQualifier = ( ) => {
7- const qualifierField = document . querySelector ( '.js-subscription-qualifier-field' ) ;
8-
9- if ( qualifierField instanceof HTMLInputElement ) {
10- qualifierField . value = '' ;
11- }
12- } ;
13-
14- /**
15- * Sets subscription qualifier section visibility
16- * @param {boolean } visible visibility state
17- * @returns {void }
18- */
19- const setQualifierVisibility = ( visible ) => {
20- document . querySelector ( '.js-subscription-qualifier-field' )
21- ?. closest ( '.form-group' )
22- ?. classList . toggle ( 'hide' , visible ) ;
6+ const getQualifierType = ( ) => {
7+ const field = document . querySelector ( '.js-sub-type-select' ) ;
8+ return field instanceof HTMLSelectElement ? field . value : null ;
239 } ;
2410
2511 /**
@@ -31,24 +17,50 @@ document.addEventListener('DOMContentLoaded', () => {
3117 return [ 'category' , 'tag' , 'user' ] . includes ( type ) ;
3218 } ;
3319
20+ /**
21+ * Synchronizes qualifier field with the given type
22+ * @param {string } type subscription type
23+ */
24+ const syncQualifier = ( type ) => {
25+ const field = document . querySelector ( '.js-sub-qualifier-select' ) ;
26+
27+ if ( field instanceof HTMLElement ) {
28+ $ ( field ) . val ( null ) . trigger ( 'change' ) ;
29+ field . closest ( '.form-group' ) ?. classList . toggle ( 'hide' , ! isQualifiable ( type ) ) ;
30+ }
31+ } ;
32+
3433 /**
3534 * Is a given element a subscription type select?
3635 * @param {Element } element
3736 * @returns {element is HTMLSelectElement }
3837 */
3938 const isTypeSelect = ( element ) => {
40- return element . matches ( '.js-subscription -type-select' ) ;
39+ return element . matches ( '.js-sub -type-select' ) ;
4140 } ;
4241
43- document . querySelectorAll ( '.js-subscription -type-select, .js-subscription -frequency-select' ) . forEach ( ( el ) => {
42+ document . querySelectorAll ( '.js-sub -type-select, .js-sub -frequency-select' ) . forEach ( ( el ) => {
4443 $ ( el ) . select2 ( ) . on ( 'change' , ( $event ) => {
4544 if ( isTypeSelect ( $event . target ) ) {
46- clearQualifier ( ) ;
47- setQualifierVisibility ( ! isQualifiable ( $event . target . value ) ) ;
45+ syncQualifier ( $event . target . value ) ;
4846 }
4947 } ) ;
5048 } ) ;
5149
50+ $ ( '.js-sub-qualifier-select' ) . select2 ( {
51+ ajax : {
52+ url : ( ) => {
53+ const type = getQualifierType ( ) ;
54+ return `/subscriptions/qualifiers?type=${ type } `
55+ } ,
56+ headers : { 'Accept' : 'application/json' } ,
57+ delay : 100 ,
58+ processResults : ( results ) => {
59+ return { results }
60+ } ,
61+ }
62+ } ) ;
63+
5264 $ ( '.js-enable-subscription' ) . on ( 'change' , async ( evt ) => {
5365 const $tgt = $ ( evt . target ) ;
5466 const $sub = $tgt . parents ( 'details' ) ;
0 commit comments