Added Input/PlainTextInput, some minor fixes
This commit is contained in:
parent
6b16d07d80
commit
181365f456
@ -5,6 +5,7 @@ namespace Slack;
|
|||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Slack\Blockkit\Modal;
|
||||||
use Slack\Response\Chat;
|
use Slack\Response\Chat;
|
||||||
use Slack\Exceptions\{SlackAlreadyPinnedException,
|
use Slack\Exceptions\{SlackAlreadyPinnedException,
|
||||||
SlackChannelNotFoundException,
|
SlackChannelNotFoundException,
|
||||||
@ -311,11 +312,11 @@ final class API
|
|||||||
return new ChannelList($this->execute('users.conversations',$args->toArray()));
|
return new ChannelList($this->execute('users.conversations',$args->toArray()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function viewOpen(string $trigger,string $view): Generic
|
public function viewOpen(string $trigger,Modal $view): Generic
|
||||||
{
|
{
|
||||||
Log::debug(sprintf('%s:Open a view',static::LOGKEY),['m'=>__METHOD__,'t'=>$trigger]);
|
Log::debug(sprintf('%s:Open a view',static::LOGKEY),['m'=>__METHOD__,'t'=>$trigger]);
|
||||||
|
|
||||||
return new Generic($this->execute('views.open',json_encode(['trigger_id'=>$trigger,'view'=>$view])));
|
return new Generic($this->execute('views.open',json_encode(['trigger_id'=>$trigger,'view'=>json_encode($view)])));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
namespace Slack\Blockkit\Blocks\Elements;
|
namespace Slack\Blockkit\Blocks\Elements;
|
||||||
|
|
||||||
use \Exception;
|
use \Exception;
|
||||||
use Slack\BlockKit;
|
|
||||||
use Slack\Blockkit\Element;
|
use Slack\Blockkit\Element;
|
||||||
|
|
||||||
final class Button extends Element
|
final class Button extends Element
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
namespace Slack\Blockkit\Blocks\Elements;
|
namespace Slack\Blockkit\Blocks\Elements;
|
||||||
|
|
||||||
use \Exception;
|
use \Exception;
|
||||||
use Slack\BlockKit;
|
|
||||||
use Slack\Blockkit\Element;
|
use Slack\Blockkit\Element;
|
||||||
|
|
||||||
final class Confirm extends Element
|
final class Confirm extends Element
|
||||||
|
@ -4,7 +4,6 @@ namespace Slack\Blockkit\Blocks\Elements;
|
|||||||
|
|
||||||
use \Exception;
|
use \Exception;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Slack\BlockKit\Blocks;
|
|
||||||
use Slack\Blockkit\Element;
|
use Slack\Blockkit\Element;
|
||||||
|
|
||||||
final class MultiStaticSelect extends Element
|
final class MultiStaticSelect extends Element
|
||||||
@ -64,7 +63,7 @@ final class MultiStaticSelect extends Element
|
|||||||
|
|
||||||
public function focus_on_load(bool $bool): self
|
public function focus_on_load(bool $bool): self
|
||||||
{
|
{
|
||||||
$this->focus_on_load = $bool ? 'true' : 'false';
|
$this->focus_on_load = $bool;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
namespace Slack\Blockkit\Blocks\Elements;
|
namespace Slack\Blockkit\Blocks\Elements;
|
||||||
|
|
||||||
use \Exception;
|
use \Exception;
|
||||||
use Slack\BlockKit;
|
|
||||||
use Slack\Blockkit\Element;
|
use Slack\Blockkit\Element;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -21,6 +20,8 @@ final class Options extends Element
|
|||||||
|
|
||||||
public function __construct(Text $text,string $value)
|
public function __construct(Text $text,string $value)
|
||||||
{
|
{
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
if (strlen($text->text) > self::LIMITS['text'])
|
if (strlen($text->text) > self::LIMITS['text'])
|
||||||
throw new Exception(sprintf('Text must be %d chars or less',self::LIMITS['text']));
|
throw new Exception(sprintf('Text must be %d chars or less',self::LIMITS['text']));
|
||||||
|
|
||||||
|
78
src/Blockkit/Blocks/Elements/PlaintTextInput.php
Normal file
78
src/Blockkit/Blocks/Elements/PlaintTextInput.php
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Slack\Blockkit\Blocks\Elements;
|
||||||
|
|
||||||
|
use Slack\Blockkit\Element;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is an element of an input dialog
|
||||||
|
*/
|
||||||
|
final class PlaintTextInput extends Element
|
||||||
|
{
|
||||||
|
protected const LIMITS = [
|
||||||
|
'action_id' => 255, // @todo Should be unique for each message
|
||||||
|
'placeholder' => 150,
|
||||||
|
];
|
||||||
|
|
||||||
|
private const MAX_MIN_LENGTH = 3000;
|
||||||
|
|
||||||
|
// @todo dispatch_action_config
|
||||||
|
// @todo focus_on_load
|
||||||
|
|
||||||
|
public function __construct(string $action_id)
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
$this->type = 'plain_text_input';
|
||||||
|
|
||||||
|
$this->action_id = $this->validate('action_id',$action_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function item(string $action_id): self
|
||||||
|
{
|
||||||
|
return new self($action_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* OPTIONAL ITEMS */
|
||||||
|
|
||||||
|
public function initial_value(string $text): self
|
||||||
|
{
|
||||||
|
$this->initial_value = $text;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function min_length(int $int): self
|
||||||
|
{
|
||||||
|
if ($int > self::MAX_MIN_LENGTH)
|
||||||
|
throw new Exception(sprintf('min_length must be less than %d',self::MAX_MIN_LENGTH));
|
||||||
|
|
||||||
|
$this->min_length = $int;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function max_length(int $int): self
|
||||||
|
{
|
||||||
|
if ($this->min_length && ($int < $this->min_length))
|
||||||
|
throw new Exception('max_length must be greater than min_length');
|
||||||
|
|
||||||
|
$this->max_length = $int;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function multiline(bool $bool): self
|
||||||
|
{
|
||||||
|
$this->multiline = $bool;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function placeholder(string $text): self
|
||||||
|
{
|
||||||
|
$this->placeholder = $this->validate('placeholder',$text);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
@ -3,7 +3,6 @@
|
|||||||
namespace Slack\Blockkit\Blocks\Elements;
|
namespace Slack\Blockkit\Blocks\Elements;
|
||||||
|
|
||||||
use \Exception;
|
use \Exception;
|
||||||
use Slack\BlockKit;
|
|
||||||
use Slack\Blockkit\Element;
|
use Slack\Blockkit\Element;
|
||||||
|
|
||||||
final class Text extends Element
|
final class Text extends Element
|
||||||
@ -33,14 +32,14 @@ final class Text extends Element
|
|||||||
if ($x=$this->type != 'plain_text')
|
if ($x=$this->type != 'plain_text')
|
||||||
throw new Exception(sprintf('Cannnot use emoji when type is [%s]',$x));
|
throw new Exception(sprintf('Cannnot use emoji when type is [%s]',$x));
|
||||||
|
|
||||||
$this->emoji = $bool ? 'true' : 'false';
|
$this->emoji = $bool;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function verbatim(bool $bool): self
|
public function verbatim(bool $bool): self
|
||||||
{
|
{
|
||||||
$this->verbatim = $bool ? 'true' : 'false';
|
$this->verbatim = $bool;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
92
src/Blockkit/Blocks/Input.php
Normal file
92
src/Blockkit/Blocks/Input.php
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Slack\Blockkit\Blocks;
|
||||||
|
|
||||||
|
use \Exception;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Slack\Blockkit\{Blocks,Element};
|
||||||
|
|
||||||
|
final class Input extends Blocks
|
||||||
|
{
|
||||||
|
protected const LIMITS = [
|
||||||
|
'block_id' => 255, // @todo Should be unique for each message
|
||||||
|
'hint' => 2000,
|
||||||
|
'label' => 2000,
|
||||||
|
];
|
||||||
|
|
||||||
|
private const VALID_ELEMENTS = [
|
||||||
|
Elements\PlaintTextInput::class,
|
||||||
|
Elements\MultiStaticSelect::class
|
||||||
|
];
|
||||||
|
|
||||||
|
// @todo dispatch_action
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Text|NULL $text not required if fields is provided
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public function __construct(Elements\Text $label=NULL)
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
if ($label->type != 'plain_text')
|
||||||
|
throw new Exception(sprintf('Text must be plain_text not %s',$label->type));
|
||||||
|
|
||||||
|
// Defaults
|
||||||
|
$this->type = 'input';
|
||||||
|
|
||||||
|
if (strlen($label->text) > self::LIMITS['label'])
|
||||||
|
throw new Exception(sprintf('Text must be %d chars or less',self::LIMITS['label']));
|
||||||
|
|
||||||
|
$this->label = $label;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function item(Elements\Text $label=NULL): self
|
||||||
|
{
|
||||||
|
return new self($label);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function jsonSerialize()
|
||||||
|
{
|
||||||
|
if (! $this->element)
|
||||||
|
throw new Exception('Must define an element');
|
||||||
|
|
||||||
|
return parent::jsonSerialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* OPTIONAL ITEMS */
|
||||||
|
|
||||||
|
public function block_id(string $string): self
|
||||||
|
{
|
||||||
|
$this->block_id = $this->validate('block_id',$string);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function element(Element $object): self
|
||||||
|
{
|
||||||
|
if (! in_array(get_class($object),self::VALID_ELEMENTS))
|
||||||
|
throw new Exception(sprintf('Invalid element [%s] added to input',get_class($object)));
|
||||||
|
|
||||||
|
$this->element = $object;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hint(Elements\Text $text): self
|
||||||
|
{
|
||||||
|
if (strlen($text->text) > self::LIMITS['hint'])
|
||||||
|
throw new Exception(sprintf('Text must be %d chars or less',self::LIMITS['hint']));
|
||||||
|
|
||||||
|
$this->hint = $text;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function optional(bool $bool): self
|
||||||
|
{
|
||||||
|
$this->optional = $bool;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
@ -1,22 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Slack\Blockkit\Input;
|
|
||||||
|
|
||||||
final class Element
|
|
||||||
{
|
|
||||||
public string $type;
|
|
||||||
public string $action_id;
|
|
||||||
public bool $multiline;
|
|
||||||
|
|
||||||
public function __construct(string $type,string $action_id,bool $multiline=FALSE)
|
|
||||||
{
|
|
||||||
$this->type = $type;
|
|
||||||
$this->action_id = $action_id;
|
|
||||||
$this->multiline = $multiline;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function item(string $type,string $action_id,bool $multiline=FALSE): self
|
|
||||||
{
|
|
||||||
return new self($type,$action_id,$multiline);
|
|
||||||
}
|
|
||||||
}
|
|
@ -17,6 +17,7 @@ final class Modal extends BlockKit
|
|||||||
'callback_id' => 255,
|
'callback_id' => 255,
|
||||||
'close' => 24,
|
'close' => 24,
|
||||||
'private_metadata' => 3000,
|
'private_metadata' => 3000,
|
||||||
|
'submit' => 24,
|
||||||
'text' => 24,
|
'text' => 24,
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -52,8 +53,9 @@ final class Modal extends BlockKit
|
|||||||
/**
|
/**
|
||||||
* Add a block to this modal
|
* Add a block to this modal
|
||||||
*
|
*
|
||||||
* @param BlockKit $block
|
* @param Blocks $block
|
||||||
* @return $this
|
* @return $this
|
||||||
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public function addBlock(Blocks $block): self
|
public function addBlock(Blocks $block): self
|
||||||
{
|
{
|
||||||
@ -97,7 +99,7 @@ final class Modal extends BlockKit
|
|||||||
if ($this->type != 'modal')
|
if ($this->type != 'modal')
|
||||||
throw new Exception(sprintf('clear_on_close is not required for %s',$type));
|
throw new Exception(sprintf('clear_on_close is not required for %s',$type));
|
||||||
|
|
||||||
$this->clear_on_close = $bool ? 'true' : 'false';
|
$this->clear_on_close = $bool;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -150,7 +152,7 @@ final class Modal extends BlockKit
|
|||||||
if ($this->type != 'modal')
|
if ($this->type != 'modal')
|
||||||
throw new Exception(sprintf('notify_on_close is not required for %s',$type));
|
throw new Exception(sprintf('notify_on_close is not required for %s',$type));
|
||||||
|
|
||||||
$this->notify_on_close = $bool ? 'true' : 'false';
|
$this->notify_on_close = $bool;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -191,7 +193,7 @@ final class Modal extends BlockKit
|
|||||||
if ($this->type != 'modal')
|
if ($this->type != 'modal')
|
||||||
throw new Exception(sprintf('submit_disabled is not required for %s',$type));
|
throw new Exception(sprintf('submit_disabled is not required for %s',$type));
|
||||||
|
|
||||||
$this->submit_disabled = $bool ? 'true' : 'false';
|
$this->submit_disabled = $bool;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,16 @@ final class Message extends BlockKit
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Empty the message
|
||||||
|
*
|
||||||
|
* @return Message
|
||||||
|
*/
|
||||||
|
public static function blank(): self
|
||||||
|
{
|
||||||
|
return new self;
|
||||||
|
}
|
||||||
|
|
||||||
/* HELPER METHODS */
|
/* HELPER METHODS */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -88,18 +98,6 @@ final class Message extends BlockKit
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Empty the message
|
|
||||||
*
|
|
||||||
* @return Message
|
|
||||||
*/
|
|
||||||
public function blank(): self
|
|
||||||
{
|
|
||||||
$this->_data = collect();
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function forgetTS(): self
|
public function forgetTS(): self
|
||||||
{
|
{
|
||||||
$this->_data->forget('ts');
|
$this->_data->forget('ts');
|
||||||
@ -269,7 +267,7 @@ final class Message extends BlockKit
|
|||||||
*/
|
*/
|
||||||
public function ephemeral(): self
|
public function ephemeral(): self
|
||||||
{
|
{
|
||||||
$this->ephemeral = 'true';
|
$this->ephemeral = TRUE;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -306,7 +304,7 @@ final class Message extends BlockKit
|
|||||||
*/
|
*/
|
||||||
public function replace_original(bool $bool=TRUE): self
|
public function replace_original(bool $bool=TRUE): self
|
||||||
{
|
{
|
||||||
$this->replace_original = $bool ? 'true' : 'false';
|
$this->replace_original = $bool;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -358,7 +356,7 @@ final class Message extends BlockKit
|
|||||||
*/
|
*/
|
||||||
public function unfurl_links(bool $bool): self
|
public function unfurl_links(bool $bool): self
|
||||||
{
|
{
|
||||||
$this->unfurl_links = $bool ? 'true' : 'false';
|
$this->unfurl_links = $bool;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -443,4 +441,4 @@ final class Message extends BlockKit
|
|||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -68,7 +68,7 @@ final class Attachment extends BlockKit
|
|||||||
if (! Arr::get($this->_data,'fields'))
|
if (! Arr::get($this->_data,'fields'))
|
||||||
$this->fields = collect();
|
$this->fields = collect();
|
||||||
|
|
||||||
$this->fields->push(['title'=>$title,'value'=>$value,'short'=>$short ? 'true' : 'false']);
|
$this->fields->push(['title'=>$title,'value'=>$value,'short'=>$short]);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user