This commit is contained in:
Ben Harris 2023-04-20 11:53:40 -04:00
parent d6d6a1083a
commit 654cee118d
7 changed files with 92 additions and 28 deletions

View File

@ -6,7 +6,7 @@
"title": "Matchplay Results",
"category": "widgets",
"icon": "embed-generic",
"description": "Example block scaffolded with Create Block tool.",
"description": "Show results from a matchplay tournament.",
"supports": {
"html": false
},
@ -21,6 +21,9 @@
"selector": "div",
"attribute": "data-tournament-id",
"default": ""
},
"data": {
"type": "object"
}
}
}

View File

@ -1 +1 @@
<?php return array('dependencies' => array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => 'aedcfaf64dcd52377178');
<?php return array('dependencies' => array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => '388c433128d11a09e6ca');

View File

@ -1 +1 @@
!function(){"use strict";var e,t={165:function(){var e=window.wp.blocks,t=window.wp.element,n=(window.wp.i18n,window.wp.blockEditor),r=window.wp.components;function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(this,arguments)}var a=JSON.parse('{"u2":"tcpinball/matchplay-results"}');(0,e.registerBlockType)(a.u2,{edit:function(e){let{attributes:l,setAttributes:a}=e;return(0,t.createElement)("div",(0,n.useBlockProps)(),(0,t.createElement)(r.TextControl,{label:"Tournament ID",value:l.tournament_id,onChange:e=>a({tournament_id:e})}))},save:function(e){let{attributes:r}=e;const a=n.useBlockProps.save();return(0,t.createElement)("div",l({},a,{"data-tournament-id":r.tournament_id}),(0,t.createElement)("table",null,(0,t.createElement)("thead",null,(0,t.createElement)("th",null,"Place"),(0,t.createElement)("th",null,"Player"),(0,t.createElement)("th",null,"Points")),(0,t.createElement)("tbody",null,(0,t.createElement)("tr",null,(0,t.createElement)("td",null,"1"),(0,t.createElement)("td",null,"Maddie"),(0,t.createElement)("td",null,"infinity")))))}})}},n={};function r(e){var l=n[e];if(void 0!==l)return l.exports;var a=n[e]={exports:{}};return t[e](a,a.exports,r),a.exports}r.m=t,e=[],r.O=function(t,n,l,a){if(!n){var o=1/0;for(s=0;s<e.length;s++){n=e[s][0],l=e[s][1],a=e[s][2];for(var i=!0,u=0;u<n.length;u++)(!1&a||o>=a)&&Object.keys(r.O).every((function(e){return r.O[e](n[u])}))?n.splice(u--,1):(i=!1,a<o&&(o=a));if(i){e.splice(s--,1);var c=l();void 0!==c&&(t=c)}}return t}a=a||0;for(var s=e.length;s>0&&e[s-1][2]>a;s--)e[s]=e[s-1];e[s]=[n,l,a]},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={826:0,431:0};r.O.j=function(t){return 0===e[t]};var t=function(t,n){var l,a,o=n[0],i=n[1],u=n[2],c=0;if(o.some((function(t){return 0!==e[t]}))){for(l in i)r.o(i,l)&&(r.m[l]=i[l]);if(u)var s=u(r)}for(t&&t(n);c<o.length;c++)a=o[c],r.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return r.O(s)},n=self.webpackChunkmatchplay=self.webpackChunkmatchplay||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}();var l=r.O(void 0,[431],(function(){return r(165)}));l=r.O(l)}();
!function(){"use strict";var e,t={165:function(){var e=window.wp.blocks,t=window.wp.element,n=(window.wp.i18n,window.wp.blockEditor),l=window.wp.components;function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(e[l]=n[l])}return e},r.apply(this,arguments)}var a=JSON.parse('{"u2":"tcpinball/matchplay-results"}');(0,e.registerBlockType)(a.u2,{edit:function(e){let{attributes:r,setAttributes:a}=e;const[o,u]=(0,t.useState)(null);return(0,t.createElement)(t.Fragment,null,(0,t.createElement)(n.InspectorControls,null,(0,t.createElement)(l.PanelBody,null,(0,t.createElement)(l.TextControl,{label:"Tournament ID",value:r.tournament_id,onChange:e=>a({tournament_id:e})}))),(0,t.createElement)("div",(0,n.useBlockProps)(),(0,t.createElement)("p",null,"Results for tournament id ",r.tournament_id),(0,t.createElement)("button",{onClick:()=>function(){let e=`https://matchplay.events/data/tournaments/${r.tournament_id}/standings`;fetch(e).then((e=>e.json())).then((e=>{let t={...e};a({data:t}),u(t),console.log(t)})).catch((e=>console.error(e)))}()},"Fetch Results"),o&&(0,t.createElement)(t.Fragment,null,(0,t.createElement)("table",{id:"tournament-results-table"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",null,"Place"),(0,t.createElement)("th",null,"Player"),(0,t.createElement)("th",null,"Points"))),(0,t.createElement)("tbody",null,Object.keys(o).map(((e,n)=>(0,t.createElement)("tr",{key:e},(0,t.createElement)("td",null,o[n].position),(0,t.createElement)("td",null,o[n].name),(0,t.createElement)("td",null,o[n].points)))))))))},save:function(e){let{attributes:l}=e;const a=n.useBlockProps.save();return(0,t.createElement)("div",r({},a,{"data-tournament-id":l.tournament_id}),(0,t.createElement)("table",{id:"tournament-results-table"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",null,"Place"),(0,t.createElement)("th",null,"Player"),(0,t.createElement)("th",null,"Points"))),(0,t.createElement)("tbody",null,Object.keys(l.data).map(((e,n)=>(0,t.createElement)("tr",{key:e},(0,t.createElement)("td",null,l.data[n].position),(0,t.createElement)("td",null,l.data[n].name),(0,t.createElement)("td",null,l.data[n].points)))))))}})}},n={};function l(e){var r=n[e];if(void 0!==r)return r.exports;var a=n[e]={exports:{}};return t[e](a,a.exports,l),a.exports}l.m=t,e=[],l.O=function(t,n,r,a){if(!n){var o=1/0;for(s=0;s<e.length;s++){n=e[s][0],r=e[s][1],a=e[s][2];for(var u=!0,c=0;c<n.length;c++)(!1&a||o>=a)&&Object.keys(l.O).every((function(e){return l.O[e](n[c])}))?n.splice(c--,1):(u=!1,a<o&&(o=a));if(u){e.splice(s--,1);var i=r();void 0!==i&&(t=i)}}return t}a=a||0;for(var s=e.length;s>0&&e[s-1][2]>a;s--)e[s]=e[s-1];e[s]=[n,r,a]},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={826:0,431:0};l.O.j=function(t){return 0===e[t]};var t=function(t,n){var r,a,o=n[0],u=n[1],c=n[2],i=0;if(o.some((function(t){return 0!==e[t]}))){for(r in u)l.o(u,r)&&(l.m[r]=u[r]);if(c)var s=c(l)}for(t&&t(n);i<o.length;i++)a=o[i],l.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return l.O(s)},n=self.webpackChunkmatchplay=self.webpackChunkmatchplay||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}();var r=l.O(void 0,[431],(function(){return l(165)}));r=l.O(r)}();

View File

@ -20,7 +20,8 @@
*
* @see https://developer.wordpress.org/reference/functions/register_block_type/
*/
function create_block_matchplay_block_init() {
function create_block_matchplay_block_init(): void {
register_block_type( __DIR__ . '/build' );
}
add_action( 'init', 'create_block_matchplay_block_init' );

View File

@ -6,7 +6,7 @@
"title": "Matchplay Results",
"category": "widgets",
"icon": "embed-generic",
"description": "Example block scaffolded with Create Block tool.",
"description": "Show results from a matchplay tournament.",
"supports": {
"html": false
},
@ -21,7 +21,10 @@
"selector": "div",
"attribute": "data-tournament-id",
"default": ""
},
"data": {
"type": "object"
}
}
}

View File

@ -1,6 +1,7 @@
import { __ } from '@wordpress/i18n';
import { useBlockProps } from '@wordpress/block-editor';
import { TextControl } from '@wordpress/components';
import { InspectorControls, useBlockProps } from '@wordpress/block-editor';
import { TextControl, PanelBody } from '@wordpress/components';
import { useState } from '@wordpress/element';
import './editor.scss';
/**
@ -12,13 +13,61 @@ import './editor.scss';
* @return {WPElement} Element to render.
*/
export default function Edit( { attributes, setAttributes } ) {
const [apiData, setApiData] = useState(null);
function fetchTournamentData() {
let url = `https://matchplay.events/data/tournaments/${attributes.tournament_id}/standings`;
fetch(url)
.then(response => response.json())
.then(response => {
let newData = { ...response };
setAttributes( { data: newData } );
setApiData(newData);
console.log(newData);
})
.catch(err => console.error( err ));
}
return (
<div { ...useBlockProps() }>
<TextControl
label='Tournament ID'
value={ attributes.tournament_id }
onChange={ ( val ) => setAttributes( { tournament_id: val } ) }
/>
</div>
<>
<InspectorControls>
<PanelBody>
<TextControl
label="Tournament ID"
value={ attributes.tournament_id }
onChange={ ( val ) => setAttributes( { tournament_id: val } ) }
/>
</PanelBody>
</InspectorControls>
<div { ...useBlockProps() }>
<p>Results for tournament id { attributes.tournament_id }</p>
<button onClick={() => fetchTournamentData()}>Fetch Results</button>
{apiData && (
<>
<table id="tournament-results-table">
<thead>
<tr>
<th>Place</th>
<th>Player</th>
<th>Points</th>
</tr>
</thead>
<tbody>
{Object.keys(apiData).map((player, i) => {
return (
<tr key={player}>
<td>{apiData[i].position}</td>
<td>{apiData[i].name}</td>
<td>{apiData[i].points}</td>
</tr>
);
})}
</tbody>
</table>
</>
)}
</div>
</>
);
}

View File

@ -14,21 +14,29 @@ export default function save( { attributes } ) {
const blockProps = useBlockProps.save();
return (
<div { ...blockProps } data-tournament-id={ attributes.tournament_id }>
<table>
<thead>
<th>Place</th>
<th>Player</th>
<th>Points</th>
</thead>
<tbody>
{attributes.data && (
<table id="tournament-results-table">
<thead>
<tr>
<td>1</td>
<td>Maddie</td>
<td>infinity</td>
<th>Place</th>
<th>Player</th>
<th>Points</th>
</tr>
</tbody>
</table>
</thead>
<tbody>
{Object.keys(attributes.data).map((player, i) => {
return (
<tr key={player}>
<td>{attributes.data[i].position}</td>
<td>{attributes.data[i].name}</td>
<td>{attributes.data[i].points}</td>
</tr>
);
})}
</tbody>
</table>
)}
{/* <ExternalLink href={ `https://next.matchplay.events/tournaments/${ attributes.tournament_id }/standings` }>
Full Results on Matchplay
</ExternalLink> */}