PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.9.5
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.9.5
4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 All 203 releases
betterdocs / react-src / gutenberg / blocks / doc-date / src / edit.js

edit.js in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 4.9.5, at react-src/gutenberg/blocks/doc-date/src/edit.js

198 lines 5.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { __ } from '@wordpress/i18n';
2 import { useSelect, select } from '@wordpress/data';
3 import { useEffect } from '@wordpress/element';
4 import { useBlockProps } from '@wordpress/block-editor';
5 import { safeHTML } from '@wordpress/dom';
6
7 import { duplicateBlockIdFix, isCssExists, softMinifyCssStrings, generateTypographyStyles } from "../../../util/helpers";
8 import Inspector from "./inspector";
9 import { DOC_DATE_TYPO } from './typographyPrefixConstants';
10 import { usePreviewDeviceType } from '../../../hooks';
11
12 import { DOC_DATE_BACKGROUND, DOC_DATE_ALIGNMENT, DOC_DATE_BORDER, DOC_DATE_MARGIN, DOC_DATE_PADDING } from './constants';
13 import { generateDimensionsControlStyles, generateBackgroundControlStyles, generateBorderShadowStyles } from '../../../util/helpers';
14
15 const edit = ({attributes, setAttributes, isSelected, clientId}) => {
16
17 const { blockId, blockMeta, resOption, doc_date_color, doc_date_align } = attributes;
18
19 const { typoStylesDesktop:docDateTypoDesk, typoStylesTab:docDateTypoTab, typoStylesMobile:docDateTypoMob } = generateTypographyStyles({
20 prefixConstant:DOC_DATE_TYPO,
21 defaultFontSize:'',
22 attributes
23 });
24
25 const { dimensionStylesDesktop:docDatePaddingDesk, dimensionStylesTab:docDatePaddingTab, dimensionStylesMobile:docDatePaddingMob } = generateDimensionsControlStyles({
26 controlName:DOC_DATE_PADDING,
27 styleFor:"padding",
28 attributes
29 });
30
31 const { dimensionStylesDesktop:docDateMarginDesk, dimensionStylesTab:docDateMarginTab, dimensionStylesMobile:docDateMarginMob } = generateDimensionsControlStyles({
32 controlName:DOC_DATE_MARGIN,
33 styleFor:"padding",
34 attributes
35 });
36
37 const { stylesDesktop:docDateBorderDesk, stylesTab:docDateBorderTab, stylesMobile:docDateBorderMob, transitionStyle: docDateBorderTrans } = generateBorderShadowStyles({
38 controlName:DOC_DATE_BORDER,
39 attributes
40 });
41
42 const {
43 backgroundStylesDesktop: docDateBackgroundDesk,
44 hoverBackgroundStylesDesktop: docDateBackgroundHoverColorDesk,
45 backgroundStylesTab: docDateBackgroundTab,
46 hoverBackgroundStylesTab: docDateBackgroundHoverTab,
47 backgroundStylesMobile: docDateBackgroundMob,
48 hoverBackgroundStylesMobile: docDateBackgroundHoverMob,
49 bgTransitionStyle: docDateTransitionStyle,
50 } = generateBackgroundControlStyles({
51 attributes,
52 controlName: DOC_DATE_BACKGROUND,
53 noOverlay: true,
54 });
55
56 const Months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
57
58 const blockProps = useBlockProps({
59 className: `bd-guten-block-main-parent-wrapper`,
60 });
61
62 const current_post_data = useSelect((select) => {
63 return select('core/editor').getCurrentPost();
64 }, []);
65
66 const desktopStyles = `
67 .update-date.${blockId} {
68 ${doc_date_align != undefined ? `display:flex; justify-content:${doc_date_align};` : '' }
69 ${docDateTypoDesk}
70 color:${doc_date_color};
71 ${docDatePaddingDesk}
72 ${docDateMarginDesk}
73 transition:${docDateBorderTrans};
74 ${docDateBorderDesk}
75 ${docDateBackgroundDesk}
76 }
77
78 .update-date.${blockId}:hover {
79 ${docDateBackgroundHoverColorDesk}
80 }
81 `;
82
83 const tabStyles = `
84 .update-date.${blockId} {
85 ${docDateTypoTab}
86 color:${doc_date_color};
87 ${docDatePaddingTab}
88 ${docDateMarginTab}
89 ${docDateBorderTab}
90 ${docDateBackgroundTab}
91 }
92
93 .update-date.${blockId}:hover {
94 ${docDateBackgroundHoverTab}
95 }
96 `;
97
98 const mobileStyles = `
99 .update-date.${blockId} {
100 ${docDateTypoMob}
101 color:${doc_date_color};
102 ${docDatePaddingMob}
103 ${docDateMarginMob}
104 ${docDateBorderMob}
105 ${docDateBackgroundMob}
106 }
107
108 .update-date.${blockId}:hover {
109 ${docDateBackgroundHoverMob}
110 }
111 `;
112
113 /**
114 * resOption: __experimentalPreviewDeviceType()
115 * Set Responsive Option
116 */
117 usePreviewDeviceType(setAttributes);
118
119 // this useEffect is for creating an unique id for each block's unique className by a random unique number
120 useEffect(() => {
121 const BLOCK_PREFIX = "betterdocs-date";
122 duplicateBlockIdFix({
123 BLOCK_PREFIX,
124 blockId,
125 setAttributes,
126 select,
127 clientId,
128 });
129 }, []);
130
131 // all css styles for large screen width (desktop/laptop) in strings ⬇
132 const desktopAllStyles = softMinifyCssStrings(`
133 ${isCssExists(desktopStyles) ? desktopStyles : " "}
134 `);
135
136 // all css styles for Tab in strings ⬇
137 const tabAllStyles = softMinifyCssStrings(`
138 ${isCssExists(tabStyles) ? tabStyles : " "}
139 `);
140
141 // all css styles for Mobile in strings ⬇
142 const mobileAllStyles = softMinifyCssStrings(`
143 ${isCssExists(mobileStyles) ? mobileStyles : " "}
144 `);
145
146 // Set All Style in "blockMeta" Attribute
147 useEffect(() => {
148 const styleObject = {
149 desktop: desktopAllStyles,
150 tab: tabAllStyles,
151 mobile: mobileAllStyles,
152 };
153 if (JSON.stringify(blockMeta) != JSON.stringify(styleObject)) {
154 setAttributes({ blockMeta: styleObject });
155 }
156 }, [attributes]);
157
158 const dateString = current_post_data.modified_gmt == undefined ? new Date() : new Date( current_post_data.modified_gmt );
159 let date = dateString.getDate();
160 let month = Months[dateString.getMonth()];
161 let year = dateString.getFullYear();
162 let updateString = `Updated on ${date}, ${month} ${year}`;
163
164 return (
165 <>
166 {isSelected && (
167 <Inspector attributes={attributes} setAttributes={setAttributes} />
168 )}
169 <style>
170 {`
171
172 ${desktopAllStyles}
173
174 ${resOption === 'Tablet' ? tabAllStyles : ''}
175 ${resOption === 'Mobile' ? mobileAllStyles : ''}
176
177 @media all and (max-width: 1024px) {
178 ${tabAllStyles}
179 }
180
181 @media all and (max-width: 767px) {
182 ${mobileAllStyles}
183 }
184
185 `}
186 </style>
187 <div {...blockProps}>
188 <div className={`update-date ${safeHTML(blockId)} `}>
189 {updateString}
190 </div>
191 </div>
192 </>
193 );
194
195 }
196
197 export default edit;
198