diff --git a/inc/class-admin-bar.php b/inc/class-admin-bar.php index 1e93ac6c..7a86ec18 100644 --- a/inc/class-admin-bar.php +++ b/inc/class-admin-bar.php @@ -29,10 +29,8 @@ public function register_link( \WP_Admin_Bar $wp_admin_bar ): void { $last_week = strtotime( '-1 week' ); $release_date = strtotime( $latest_release->post_date_gmt ); - $is_pre_release = get_post_meta( $latest_release->ID, 'is_pre_release', true ); - - $version = get_post_meta( $latest_release->ID, 'version', true ); - $base_url = admin_url( 'admin.php?page=release-notes' ); + $version = get_post_meta( $latest_release->ID, 'version', true ); + $base_url = admin_url( 'admin.php?page=release-notes' ); $wp_admin_bar->add_node( [ 'id' => 'release-note-version', @@ -40,7 +38,7 @@ public function register_link( \WP_Admin_Bar $wp_admin_bar ): void { 'href' => sprintf( '%s&release-id=%d', $base_url, $latest_release->ID ), 'parent' => 'top-secondary', 'meta' => [ - 'class' => $is_pre_release ? 'release-note is-pre-release' : 'release-note', + 'class' => str_contains( $version, '-') ? 'release-note is-pre-release' : 'release-note', ], ] ); diff --git a/inc/class-post-type.php b/inc/class-post-type.php index 080d3b97..10c8ac13 100644 --- a/inc/class-post-type.php +++ b/inc/class-post-type.php @@ -24,11 +24,17 @@ public function register_meta(): void { 'release-note', 'version', [ - 'show_in_rest' => true, + 'show_in_rest' => [ + 'schema' => [ + 'type' => 'string', + 'default' => '0.0.0', + ], + ], 'single' => true, 'type' => 'string', - ] + ], ); + register_post_meta( 'release-note', 'release_date', @@ -38,16 +44,6 @@ public function register_meta(): void { 'type' => 'string', ] ); - register_post_meta( - 'release-note', - 'is_pre_release', - [ - 'show_in_rest' => true, - 'single' => true, - 'type' => 'boolean', - 'default' => false, - ] - ); } /** diff --git a/inc/class-release-publish.php b/inc/class-release-publish.php index 0bba3f38..b4442144 100644 --- a/inc/class-release-publish.php +++ b/inc/class-release-publish.php @@ -374,12 +374,14 @@ public function test_scheduled_event( $id ) { $content_arr = explode( "\n", $content ); + $version = get_post_meta( $id, 'version', true ); + $header_title = [ [ 'type' => 'header', 'text' => [ 'type' => 'plain_text', - 'text' => get_post_meta( $id, 'is_pre_release', true ) ? __( 'New Pre-Release 🎉', 'release-notes' ) : __( 'New Release 🎉', 'release-notes' ), + 'text' => str_contains( $version, '-' ) ? __( 'New Pre-Release 🎉', 'release-notes' ) : __( 'New Release 🎉', 'release-notes' ), ], ], ]; @@ -392,7 +394,7 @@ public function test_scheduled_event( $id ) { 'text' => sprintf( /* translators: %s: The version number. */ __( 'Version: %s', 'release-notes' ), - get_post_meta( $id, 'version', true ) + $version, ), ], ], diff --git a/inc/class-rest-endpoints.php b/inc/class-rest-endpoints.php index 8bda8fb5..fbd004dd 100644 --- a/inc/class-rest-endpoints.php +++ b/inc/class-rest-endpoints.php @@ -48,7 +48,6 @@ public function new_release( \WP_REST_Request $req ) { $title = $params['name']; $published_at = $params['publishedAt']; $tag = $params['tagName']; - $is_pre_release = $params['isPrerelease']; if ( $is_draft ) { return; @@ -76,7 +75,6 @@ public function new_release( \WP_REST_Request $req ) { 'meta_input' => [ 'release_date' => explode( 'T', gmdate( 'c', strtotime( $published_at ) ) )[0], 'version' => $tag, - 'is_pre_release' => $is_pre_release, ], ]); } diff --git a/inc/views/release-notes-item.php b/inc/views/release-notes-item.php index 080e8c13..2062579f 100644 --- a/inc/views/release-notes-item.php +++ b/inc/views/release-notes-item.php @@ -1,10 +1,9 @@ -
+

diff --git a/inc/views/release-notes-widget.php b/inc/views/release-notes-widget.php index 48e677b7..3e8c429f 100644 --- a/inc/views/release-notes-widget.php +++ b/inc/views/release-notes-widget.php @@ -1,6 +1,6 @@
diff --git a/src/dashboard/styles/styles.scss b/src/dashboard/styles/styles.scss index 68a652f4..cd1b2f5b 100644 --- a/src/dashboard/styles/styles.scss +++ b/src/dashboard/styles/styles.scss @@ -135,3 +135,7 @@ li.release-note.is-pre-release > a { background: #ca4a1f !important; } } + +.components-base-control:has(div > .release-notes__prerelease) { + flex: none; +} diff --git a/src/editor/register-plugins/CustomBlockFields.js b/src/editor/register-plugins/CustomBlockFields.js index 68c119c8..2a6c40df 100644 --- a/src/editor/register-plugins/CustomBlockFields.js +++ b/src/editor/register-plugins/CustomBlockFields.js @@ -2,14 +2,16 @@ const { PluginDocumentSettingPanel } = wp.editPost; const { PanelRow, DatePicker, - ToggleControl, - __experimentalInputControl: InputControl, + SelectControl, + __experimentalNumberControl: NumberControl, __experimentalText: Text, __experimentalVStack: VStack, + __experimentalHStack: HStack, } = wp.components; const { useEntityProp } = wp.coreData; const { useSelect } = wp.data; const { __ } = wp.i18n; +const { useState, useEffect } = wp.element; /** Adds the date selector to the post settings */ function CustomBlockFields() { @@ -17,21 +19,111 @@ function CustomBlockFields() { if (postType !== 'release-note') return null; const [meta, setMeta] = useEntityProp('postType', postType, 'meta'); - const { version, is_pre_release: isPrerelease, release_date: releaseDate } = meta; + const { version, release_date: releaseDate } = meta; + + const [versionObject, setVersionObject] = useState({}); + + /** + * Splits the version string into an object + */ + const splitVersion = () => { + const prerelease = version.split('-'); + const versionArray = prerelease[0].split('.'); + const prereleaseVersion = prerelease[1] ? prerelease[1].split('.')[1] : ''; + const prereleaseType = prerelease[1] ? prerelease[1].split('.')[0] : ''; + + setVersionObject({ + major: versionArray[0], + minor: versionArray[1], + patch: versionArray[2], + prerelease: prereleaseType, + prerelease_version: prereleaseVersion, + }); + }; + + /** + * Updates the version object + * + * @param {integer || string} val value + * @param {string} key key + */ + const onVersionChange = (val, key) => { + const tempVersionObject = { ...versionObject }; + tempVersionObject[key] = val; + + let versionString = `${tempVersionObject.major}.${tempVersionObject.minor}.${tempVersionObject.patch}`; + + if (tempVersionObject.prerelease) { + versionString += `-${tempVersionObject.prerelease}`; + if (tempVersionObject.prerelease_version) { + versionString += `.${tempVersionObject.prerelease_version}`; + } + } + + setVersionObject(tempVersionObject); + setMeta({ ...meta, version: versionString }); + }; const onDateChange = (val) => { setMeta({ ...meta, release_date: val }); }; + useEffect(() => { + splitVersion(); + }, []); + return ( <> - setMeta({ ...meta, version: val })} - label={__('Version Number')} - /> + + onVersionChange(val, 'major')} + spinControls="none" + /> + . + onVersionChange(val, 'minor')} + spinControls="none" + /> + . + onVersionChange(val, 'patch')} + spinControls="none" + /> + onVersionChange(val, 'prerelease')} + /> + {versionObject.prerelease && ( + <> + . + onVersionChange(val, 'prerelease_version')} + spinControls="none" + /> + + )} +
@@ -43,14 +135,6 @@ function CustomBlockFields() { /> -
- - setMeta({ ...meta, is_pre_release: val })} - /> -
);