1+ window . addEventListener ( 'DOMContentLoaded' , ( ) => {
2+ QPixel . DOM . addSelectorListener ( 'change' , 'input[name="report_type"]' , ev => {
3+ const value = /** @type HTMLInputElement */ ( document . querySelector ( 'input[name="report_type"]:checked' ) ) . value ;
4+ document . querySelectorAll ( `[data-report-type="${ value } "]` ) . forEach ( el => {
5+ el . classList . remove ( 'hidden' ) ;
6+ el . removeAttribute ( 'disabled' ) ;
7+ } ) ;
8+ document . querySelectorAll ( `[data-report-type]:not([data-report-type="${ value } "])` ) . forEach ( el => {
9+ el . classList . add ( 'hidden' ) ;
10+ el . setAttribute ( 'disabled' , 'disabled' ) ;
11+ } ) ;
12+ } ) ;
13+
14+ QPixel . DOM . addSelectorListener ( 'click' , '.js-reply-button' , ev => {
15+ const tgt = /** @type HTMLElement */ ( ev . currentTarget ) ;
16+ const internal = tgt . dataset . internal ;
17+
18+ const widget = /** @type HTMLElement */ ( document . querySelector ( '.js-reply-widget' ) ) ;
19+ const label = /** @type HTMLElement */ ( document . querySelector ( '.js-reply-label' ) ) ;
20+ const form = /** @type HTMLFormElement */ ( document . querySelector ( '.js-reply-form' ) ) ;
21+
22+ widget . classList . add ( 'hidden' ) ;
23+
24+ if ( internal === 'true' ) {
25+ widget . classList . add ( 'is-yellow' ) ;
26+ label . innerText = 'Add your internal notes' ;
27+ }
28+ else {
29+ widget . classList . remove ( 'is-yellow' ) ;
30+ label . innerText = 'Add your reply' ;
31+ }
32+ /** @type HTMLInputElement */ ( form . querySelector ( 'input[name="internal"]' ) ) . value = internal ;
33+
34+ widget . classList . remove ( 'hidden' ) ;
35+ } ) ;
36+
37+ QPixel . DOM . addSelectorListener ( 'submit' , '.js-reply-form' , async ev => {
38+ ev . preventDefault ( ) ;
39+
40+ const tgt = /** @type HTMLFormElement */ ( ev . currentTarget ) ;
41+
42+ const data = Object . fromEntries ( new FormData ( tgt ) . entries ( ) ) ;
43+ const resp = await QPixel . fetchJSON ( tgt . action , data ) ;
44+ const json = await resp . json ( ) ;
45+ QPixel . handleJSONResponse ( json , ( ) => {
46+ document . querySelector ( '.js-comments' ) . insertAdjacentHTML ( 'beforeend' , json . comment ) ;
47+ tgt . reset ( ) ;
48+ tgt . querySelector ( 'input[type="submit"]' ) . removeAttribute ( 'disabled' ) ;
49+ document . querySelector ( '.js-reply-widget' ) . classList . add ( 'hidden' ) ;
50+
51+ if ( ! json . can_add_more ) {
52+ document . querySelector ( '.js-reply-container' ) . remove ( ) ;
53+ }
54+ } ) ;
55+ } ) ;
56+ } ) ;
0 commit comments