diff --git a/.eslintrc.js b/.eslintrc.js
index add372a0b..31146aefe 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -46,6 +46,7 @@ module.exports = {
"react/forbid-prop-types": 0,
"jsx-quotes": [2, "prefer-single"],
"jsx-a11y/href-no-hash": 0,
+ "jsx-a11y/aria-role": 0,
"import/prefer-default-export": 0,
"import/no-cycle": 0,
"camelcase": 0,
diff --git a/__tests__/__snapshots__/Storyshots.test.js.snap b/__tests__/__snapshots__/Storyshots.test.js.snap
index 286e506ee..17607daf1 100644
--- a/__tests__/__snapshots__/Storyshots.test.js.snap
+++ b/__tests__/__snapshots__/Storyshots.test.js.snap
@@ -1,882 +1,316 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
-exports[`Storyshots Avatar list Avatar 1`] = `
-
-
-
- Avatar by text
-
-
-
+
-
-
-
-
- Avatar by roomId
-
-
-
-
-
-
-
- Avatar by url
-
-
-
+
+
+`;
+
+exports[`Storyshots Avatar Avatar by roomId 1`] = `
+
+
+
-
-
-
-
- Avatar by path
-
-
-
-
-
-
-
- With ETag
-
-
-
+
+
+`;
+
+exports[`Storyshots Avatar Avatar by text 1`] = `
+
+
+
-
-
-
-
- Without ETag
-
-
-
-
-
-
-
- Emoji
-
-
-
+
+
+`;
+
+exports[`Storyshots Avatar Avatar by url 1`] = `
+
+
+
-
-
-
-
- Direct
-
-
-
-
-
-
-
- Channel
-
-
-
+
+
+`;
+
+exports[`Storyshots Avatar Channel 1`] = `
+
+
+
-
-
-
-
- Touchable
-
-
-
-
-
-
-
-
-
- Static
-
-
-
+
+
+`;
+
+exports[`Storyshots Avatar Children 1`] = `
+
+
+
-
-
-
-
- Custom borderRadius
-
-
-
-
-
-
-
+
+
- Children
-
-
-
-
-
-
+
+
+
+`;
+
+exports[`Storyshots Avatar Custom borderRadius 1`] = `
+
+
+
-
-
-
-
-
-
- Wrong server
-
-
+
+
+`;
+
+exports[`Storyshots Avatar Custom style 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots Avatar Direct 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots Avatar Emoji 1`] = `
+
+
-
+
-
-
-
-
- Custom style
-
+ style={
+ Object {
+ "bottom": 0,
+ "left": 0,
+ "position": "absolute",
+ "right": 0,
+ "top": 0,
+ }
+ }
+ />
+
+
+`;
+
+exports[`Storyshots Avatar Static 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots Avatar Touchable 1`] = `
+
+
-
-
-
+ }
+ />
-
+
+`;
+
+exports[`Storyshots Avatar With ETag 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots Avatar Without ETag 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots Avatar Wrong server 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots BackgroundContainer basic 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots BackgroundContainer black theme - loading 1`] = `
+
+
+
+
+
+
+`;
+
+exports[`Storyshots BackgroundContainer black theme - text 1`] = `
+
+
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
+`;
+
+exports[`Storyshots BackgroundContainer dark theme - loading 1`] = `
+
+
+
+
+
+
+`;
+
+exports[`Storyshots BackgroundContainer dark theme - text 1`] = `
+
+
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
+`;
+
+exports[`Storyshots BackgroundContainer loading 1`] = `
+
+
+
+
+
+
+`;
+
+exports[`Storyshots BackgroundContainer long text 1`] = `
+
+
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
+`;
+
+exports[`Storyshots BackgroundContainer text 1`] = `
+
+
+
+
+
+ Text here
+
+
`;
exports[`Storyshots BackgroundContainer basic 1`] = `
@@ -10450,16 +10732,2090 @@ exports[`Storyshots List with small font 1`] = `
`;
-exports[`Storyshots Markdown list Markdown 1`] = `
-
+
+
+
+
+
+ This is block quote
+
+
+
+
+
+
+ this is a normal line
+
+
+
+`;
+
+exports[`Storyshots Markdown Code 1`] = `
+
+
+
+ This is
+
+
+ inline code
+
+
+
+
+ Inline
+
+
+ code
+
+
+ has
+
+
+ back-ticks around
+
+
+ it.
+
+
+
+ Code block
+
+
+
+`;
+
+exports[`Storyshots Markdown Edited 1`] = `
+
+
+
+ This is edited
+
+
+ (
+ edited
+ )
+
+
+
+`;
+
+exports[`Storyshots Markdown Emoji 1`] = `
+
+
+
+ Unicode: 😃😇👍
+
+
+
+
+ Shortnames:
+
+
+ 😂
+
+
+ 👍
+
+
+
+
+ Custom emojis:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 😃
+
+
+ 👍
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Markdown Hashtag 1`] = `
+
+
+
+ #test-channel
+
+
+
+
+
+ #unknown
+
+
+
+`;
+
+exports[`Storyshots Markdown Headers 1`] = `
+
+
+
+ Header 1
+
+
+
+
+ Header 2
+
+
+
+
+ Header 3
+
+
+
+
+ Header 4
+
+
+
+
+ Header 5
+
+
+
+
+ Header 6
+
+
+
+`;
+
+exports[`Storyshots Markdown Image 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots Markdown Links 1`] = `
+
+
+
+
+ Markdown link
+
+
+
+ :
+
+
+ [description](url)
+
+
+
+
+
+ Formatted Link
+
+
+
+ :
+
+
+ <url|description>
+
+
+
+`;
+
+exports[`Storyshots Markdown Lists 1`] = `
+
+
+
+
+ •
+
+
+
+
+
+ Open Source
+
+
+
+
+
+
+
+ •
+
+
+
+
+
+ Rocket.Chat
+
+
+
+
+
+ ◦
+
+
+
+
+
+ nodejs
+
+
+
+
+
+
+
+ ◦
+
+
+
+
+
+ ReactNative
+
+
+
+
+
+
+
+
+
+ 1.
+
+
+
+
+
+ Open Source
+
+
+
+
+
+
+
+ 2.
+
+
+
+
+
+ Rocket.Chat
+
+
+
+
+
+`;
+
+exports[`Storyshots Markdown Mentions 1`] = `
+
- Short Text
-
-
-
- This is Rocket.Chat
-
-
-
-
- Long Text
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-
-
-
-
- Line Break Text
-
-
-
-
- a
-
-
-
-
-
-
- b
-
-
-
-
-
-
- c
-
-
-
-
-
-
-
-
-
-
- d
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- e
-
-
-
-
- Sequential empty spaces
-
-
-
-
- a b c
-
-
-
-
- Edited
-
-
-
-
- This is edited
-
-
- (
- edited
- )
-
-
-
-
- Preview
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+ rocket.cat
- a b c d e
-
-
- a b c
-
-
- @rocket.cat @name1 @all @here @unknown #general #unknown
-
-
- Testing: 😃 👍 :marioparty:
-
-
-
- Mentions
-
-
-
-
- rocket.cat
-
-
-
-
-
- name1
-
-
-
-
-
- all
-
-
-
-
-
- here
-
-
-
-
-
- @unknown
-
-
-
-
- Mentions with Real Name
-
-
-
-
- Rocket Cat
-
-
-
-
-
- Name
-
-
-
-
-
- all
-
-
-
-
-
- here
-
-
-
-
-
- @unknown
-
-
-
-
- Hashtag
-
-
-
-
- #test-channel
-
-
-
-
-
- #unknown
-
-
-
-
- Emoji
-
-
-
-
- Unicode: 😃😇👍
-
-
-
-
- Shortnames:
-
-
- 😂
-
-
- 👍
-
-
-
-
- Custom emojis:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 😃
-
-
- 👍
-
-
-
-
-
-
-
-
-
-
- Block Quote
-
-
-
-
-
-
-
- This is block quote
-
-
-
-
-
-
- this is a normal line
-
-
-
-
- Links
-
-
-
-
-
- Markdown link
-
-
-
- :
-
-
- [description](url)
-
-
-
-
-
- Formatted Link
-
-
-
- :
-
-
- <url|description>
-
-
-
-
- Image
-
-
-
-
-
-
-
- Headers
-
-
-
-
- Header 1
-
-
-
-
- Header 2
-
-
-
-
- Header 3
-
-
-
-
- Header 4
-
-
-
-
- Header 5
-
-
-
-
- Header 6
-
-
-
-
- Inline Code
-
-
-
-
- This is
-
-
- inline code
-
-
-
-
- Code Block
-
-
-
-
- Inline
-
-
- code
-
-
- has
-
-
- back-ticks around
-
-
- it.
-
-
-
- Code block
-
-
-
-
- Lists
-
-
-
-
-
- •
-
-
-
-
-
- Open Source
-
-
-
-
-
-
-
- •
-
-
-
-
-
- Rocket.Chat
-
-
-
-
-
- ◦
-
-
-
-
-
- nodejs
-
-
-
-
-
+
+
+
+ name1
+
+
-
-
- ◦
-
-
-
-
-
- ReactNative
-
-
-
-
-
-
-
-
- Numbered Lists
-
-
-
-
-
- 1.
-
-
-
-
-
- Open Source
-
-
-
-
-
+
-
-
- 2.
-
-
-
+
-
-
- Rocket.Chat
-
-
-
-
-
-
- Emphasis
-
-
+ >
+
+
+
+ here
+
+
+
+
-
- Strong emphasis, aka bold, with
-
-
- asterisks
-
-
- or
-
-
- underscores
-
+ @unknown
-
+
- Table
-
-
-
-
+
-
-
-
-
-
-
- First Header
-
-
-
-
-
-
- Second Header
-
-
-
-
-
-
-
-
- Content from cell 1
-
-
-
-
-
-
- Content from cell 2
-
-
-
-
-
-
-
-
- Content in the first column
-
-
-
-
-
-
- Content in the second column
-
-
-
-
-
-
-
-
+
+
+
+ Name
+
+
+
+
+
+ all
+
+
- Click to see full table
-
-
-
+ ],
+ ]
+ }
+ >
+
+
+
+ here
+
+
+
+
+
+ @unknown
+
+
`;
-exports[`Storyshots Message list message 1`] = `
+exports[`Storyshots Markdown Preview 1`] = `
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+
+ a b c d e
+
+
+ a b c
+
+
+ @rocket.cat @name1 @all @here @unknown #general #unknown
+
+
+ Testing: 😃 👍 :marioparty:
+
+
+`;
+
+exports[`Storyshots Markdown Table 1`] = `
+
+
+
+
+
+
+
+
+
+ First Header
+
+
+
+
+
+
+ Second Header
+
+
+
+
+
+
+
+
+ Content from cell 1
+
+
+
+
+
+
+ Content from cell 2
+
+
+
+
+
+
+
+
+ Content in the first column
+
+
+
+
+
+
+ Content in the second column
+
+
+
+
+
+
+
+
+ Click to see full table
+
+
+
+`;
+
+exports[`Storyshots Markdown Text 1`] = `
+
+
+
+ This is Rocket.Chat
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+
+
+
+ a
+
+
+
+
+
+
+ b
+
+
+
+
+
+
+ c
+
+
+
+
+
+
+
+
+
+
+ d
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ e
+
+
+
+
+ a b c
+
+
+
+
+ Strong emphasis, aka bold, with
+
+
+ asterisks
+
+
+ or
+
+
+ underscores
+
+
+
+`;
+
+exports[`Storyshots Message Archived 1`] = `
-
- Simple
-
@@ -14615,8 +14449,261 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
+ "opacity": 1,
+ }
+ }
+ >
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ This message is inside an archived room
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Basic 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Long message
-
@@ -14875,8 +14942,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -14976,27 +15043,19 @@ exports[`Storyshots Message list message 1`] = `
-
- Grouped messages
-
+
+
+`;
+
+exports[`Storyshots Message Block Quote 1`] = `
+
+
@@ -15135,8 +15195,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -15183,1422 +15243,91 @@ exports[`Storyshots Message list message 1`] = `
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-
-
-
- 10:00 AM
-
-
-
-
-
- Different user
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This is the third message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This is the second message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- This is the first message
-
-
-
-
-
-
-
-
-
- Without header
-
-
-
-
-
-
-
-
-
- Message
-
-
-
-
-
-
-
-
-
- With alias
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Diego Mello
- @
- diego.mello
+
+ Testing block quote
+
-
+
-
- 10:00 AM
-
-
-
-
-
- Message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Diego Mello
-
- @
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-
-
-
-
- 10:00 AM
-
-
-
-
-
- Message
-
-
-
-
-
-
-
-
-
- Edited
-
@@ -16737,8 +15467,2248 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
+ "opacity": 1,
+ }
+ }
+ >
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+
+
+
+ Testing block quote
+
+
+
+
+
+
+ Testing block quote
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Broadcast 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ Broadcasted message
+
+
+
+
+
+
+
+
+
+ Reply
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Colored attachments 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+
+
+
+ Field 1
+
+
+
+ Value 1
+
+
+
+
+
+ Field 2
+
+
+
+ Value 2
+
+
+
+
+
+
+
+
+
+
+
+ Field 1
+
+
+
+ Value 1
+
+
+
+
+
+ Field 2
+
+
+
+ Value 2
+
+
+
+
+
+
+
+
+
+
+
+ Field 1
+
+
+
+ Value 1
+
+
+
+
+
+ Field 2
+
+
+
+ Value 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Custom fields 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ Message
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+ Custom fields
+
+
+
+
+
+ Field 1
+
+
+
+ Value 1
+
+
+
+
+
+ Field 2
+
+
+
+ Value 2
+
+
+
+
+
+ Field 3
+
+
+
+ Value 3
+
+
+
+
+
+ Field 4
+
+
+
+ Value 4
+
+
+
+
+
+ Field 5
+
+
+
+ Value 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Custom style 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+`;
+
+exports[`Storyshots Message Date and Unread separators 1`] = `
+
+
+
- Encrypted
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+ 10:00 AM
+
+
+
+
+
+ Fourth message
+
+
+
+
+
+
+
+
+
+
+ unread
+
+
+
+ November 10, 2017
+
+
@@ -16997,8 +18264,4493 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
+ "opacity": 1,
+ }
+ }
+ >
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ Third message
+
+
+
+
+
+
+
+
+
+
+ unread
+
+
+
+
+
+
+
+
+
+
+
+ Second message
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+ 10:00 AM
+
+
+
+
+
+ Second message
+
+
+
+
+
+
+
+
+
+
+
+ November 10, 2017
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ First message
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Discussion 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+ Started a discussion:
+
+
+ This is a discussion
+
+
+
+
+
+
+
+ No messages yet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+ Started a discussion:
+
+
+ This is a discussion
+
+
+
+
+
+
+
+ 1 message
+
+
+
+ November 10, 2017
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+ Started a discussion:
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+
+
+
+
+
+
+ 10 messages
+
+
+
+ November 10, 2017
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+ Started a discussion:
+
+
+ This is a discussion
+
+
+
+
+
+
+
+ +999 messages
+
+
+
+ November 10, 2017
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Edited 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ Message
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Editing 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ Message being edited
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Emojis 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ 👊🤙👏
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ 👏
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ 🤙
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ 🤙
+
+
+
+
+
+ 🤙🤙
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Encrypted 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -17462,8 +23215,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -17649,7 +23402,7 @@ exports[`Storyshots Message list message 1`] = `
onStartShouldSetResponder={[Function]}
style={
Object {
- "backgroundColor": "#ffffff",
+ "backgroundColor": "#f1f2f4",
"borderRadius": 2,
"marginBottom": 8,
"marginRight": 8,
@@ -17671,7 +23424,7 @@ exports[`Storyshots Message list message 1`] = `
"minWidth": 46.3,
},
Object {
- "borderColor": "#e1e5e8",
+ "borderColor": "#1d74f5",
},
]
}
@@ -17729,7 +23482,7 @@ exports[`Storyshots Message list message 1`] = `
onStartShouldSetResponder={[Function]}
style={
Object {
- "backgroundColor": "#ffffff",
+ "backgroundColor": "#f1f2f4",
"borderRadius": 2,
"marginBottom": 8,
"marginRight": 8,
@@ -17751,7 +23504,7 @@ exports[`Storyshots Message list message 1`] = `
"minWidth": 46.3,
},
Object {
- "borderColor": "#e1e5e8",
+ "borderColor": "#1d74f5",
},
]
}
@@ -17831,7 +23584,7 @@ exports[`Storyshots Message list message 1`] = `
onStartShouldSetResponder={[Function]}
style={
Object {
- "backgroundColor": "#ffffff",
+ "backgroundColor": "#f1f2f4",
"borderRadius": 2,
"marginBottom": 8,
"marginRight": 8,
@@ -17853,7 +23606,7 @@ exports[`Storyshots Message list message 1`] = `
"minWidth": 46.3,
},
Object {
- "borderColor": "#e1e5e8",
+ "borderColor": "#1d74f5",
},
]
}
@@ -18328,6 +24081,7 @@ exports[`Storyshots Message list message 1`] = `
"alignItems": "center",
"flex": 1,
"flexDirection": "row",
+ "justifyContent": "space-between",
}
}
>
@@ -18344,8 +24098,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -18635,6 +24389,7 @@ exports[`Storyshots Message list message 1`] = `
"alignItems": "center",
"flex": 1,
"flexDirection": "row",
+ "justifyContent": "space-between",
}
}
>
@@ -18651,8 +24406,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -18920,6 +24675,7 @@ exports[`Storyshots Message list message 1`] = `
"alignItems": "center",
"flex": 1,
"flexDirection": "row",
+ "justifyContent": "space-between",
}
}
>
@@ -18936,8 +24692,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -19267,6 +25023,7 @@ exports[`Storyshots Message list message 1`] = `
"alignItems": "center",
"flex": 1,
"flexDirection": "row",
+ "justifyContent": "space-between",
}
}
>
@@ -19283,8 +25040,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -19654,76 +25411,127 @@ exports[`Storyshots Message list message 1`] = `
-
- Block Quote
-
-
+
+`;
+
+exports[`Storyshots Message Error 1`] = `
+
+
+
+
-
+ >
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
- 10:00 AM
+ diego.mello
-
-
+ 10:00 AM
+
+
+
-
-
-
-
- Testing block quote
-
-
-
-
+
+
+
+
+
+ This message has error
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+
+
+
+
+
+ This message has error too
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Full name 1`] = `
+
+
@@ -20084,8 +26048,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -20108,7 +26072,7 @@ exports[`Storyshots Message list message 1`] = `
]
}
>
- diego.mello
+ Diego Mello
-
-
-
-
-
- Testing block quote
-
-
-
-
- Testing block quote
+ Message
@@ -20264,27 +26149,19 @@ exports[`Storyshots Message list message 1`] = `
-
- Lists
-
+
+
+`;
+
+exports[`Storyshots Message Grouped messages 1`] = `
+
+
@@ -20423,8 +26301,1100 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
+ "opacity": 1,
+ }
+ }
+ >
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ ...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+
+
+ 10:00 AM
+
+
+
+
+
+ Different user
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This is the third message
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This is the second message
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ This is the first message
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Ignored 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Message ignored. Tap to display it.
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Lists 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Numerated lists
-
@@ -20907,8 +27857,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -21139,27 +28089,6 @@ exports[`Storyshots Message list message 1`] = `
-
- Numerated lists in separated messages
-
@@ -21298,8 +28228,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -21585,287 +28515,19 @@ exports[`Storyshots Message list message 1`] = `
-
- Static avatar
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- Message
-
-
-
-
-
-
-
-
-
- Full name
-
+
+
+`;
+
+exports[`Storyshots Message Mentions 1`] = `
+
+
@@ -22004,268 +28667,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
- "flexDirection": "row",
- "opacity": 1,
- }
- }
- >
-
- Diego Mello
-
-
-
- 10:00 AM
-
-
-
-
-
- Message
-
-
-
-
-
-
-
-
-
- Mentions
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -22680,8 +29084,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -22986,27 +29390,19 @@ exports[`Storyshots Message list message 1`] = `
-
- Emojis
-
+
+
+`;
+
+exports[`Storyshots Message Message with read receipt 1`] = `
+
+
@@ -23145,8 +29542,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -23212,7 +29609,7 @@ exports[`Storyshots Message list message 1`] = `
}
>
+ I'm fine!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I'm fine!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ I'm fine!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I'm fine!
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Message with reply 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ I'm fine!
+
+
+
+
+
+
+
+ I'm a very long long title and I'll break
+
+
+
+
- 👊🤙👏
+ Array [
+ Object {},
+ Object {
+ "alignItems": "flex-start",
+ "flexDirection": "row",
+ "flexWrap": "wrap",
+ "justifyContent": "flex-start",
+ "marginBottom": 0,
+ "marginTop": 0,
+ },
+ ],
+ ]
+ }
+ >
+ How are you?
+
-
+
-
- Single Emoji
-
@@ -23411,8 +30634,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -23478,7 +30701,7 @@ exports[`Storyshots Message list message 1`] = `
}
>
+ I'm fine!
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+ How are you?
+
+
- 👏
+ Array [
+ Object {
+ "height": 20,
+ "width": 20,
+ },
+ Object {},
+ ],
+ ]
+ }
+ >
+
+
-
+
-
- Custom Emojis
-
+
+
+`;
+
+exports[`Storyshots Message Message with thread 1`] = `
+
+
@@ -23677,680 +31033,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
- "flexDirection": "row",
- "opacity": 1,
- }
- }
- >
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Single Custom Emojis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Normal Emoji + Custom Emojis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 🤙
+ How are you?
-
+
+
+
+
-
+
+
+
+
+ >
+
+
+
+
+ 1
+
+
+
+
+
+
+
+ 0
+
+
-
+
+
+
+
+
+
+
+
+
-
- Four emoji
-
+
+
+
+
+
+ How are you?
+
+
+
+
+
+
+
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
- 🤙
-
-
-
-
-
- 🤙🤙
-
+ I'm fine!
@@ -24814,27 +31607,6 @@ exports[`Storyshots Message list message 1`] = `
-
- Time format
-
+
+
+
+
+
+ Thread with emoji🙂 😂
+
+
+
+
+
+
+
-
-
-
- diego.mello
-
-
-
- 10 November 2017
-
-
-
- Testing
-
+ I'm fine!
@@ -25074,27 +31847,977 @@ exports[`Storyshots Message list message 1`] = `
-
- Reactions
-
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I'm fine!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Thread with emoji🙂 😂
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Thread with attachment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sent an attachment
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Reactions 1`] = `
+
+
@@ -25233,8 +32957,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -25358,7 +33082,7 @@ exports[`Storyshots Message list message 1`] = `
onStartShouldSetResponder={[Function]}
style={
Object {
- "backgroundColor": "#ffffff",
+ "backgroundColor": "#f1f2f4",
"borderRadius": 2,
"marginBottom": 8,
"marginRight": 8,
@@ -25380,7 +33104,7 @@ exports[`Storyshots Message list message 1`] = `
"minWidth": 46.3,
},
Object {
- "borderColor": "#e1e5e8",
+ "borderColor": "#1d74f5",
},
]
}
@@ -25414,7 +33138,7 @@ exports[`Storyshots Message list message 1`] = `
]
}
>
- 3
+ 1
@@ -25516,7 +33240,7 @@ exports[`Storyshots Message list message 1`] = `
]
}
>
- 13
+ 99
@@ -25596,7 +33320,87 @@ exports[`Storyshots Message list message 1`] = `
]
}
>
- 1
+ 999
+
+
+
+
+
+
+ 🤔
+
+
+ 9999
@@ -25675,27 +33479,6 @@ exports[`Storyshots Message list message 1`] = `
-
- Multiple reactions
-
@@ -25834,8 +33618,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -25959,7 +33743,7 @@ exports[`Storyshots Message list message 1`] = `
onStartShouldSetResponder={[Function]}
style={
Object {
- "backgroundColor": "#ffffff",
+ "backgroundColor": "#f1f2f4",
"borderRadius": 2,
"marginBottom": 8,
"marginRight": 8,
@@ -25981,7 +33765,7 @@ exports[`Storyshots Message list message 1`] = `
"minWidth": 46.3,
},
Object {
- "borderColor": "#e1e5e8",
+ "borderColor": "#1d74f5",
},
]
}
@@ -26061,7 +33845,7 @@ exports[`Storyshots Message list message 1`] = `
onStartShouldSetResponder={[Function]}
style={
Object {
- "backgroundColor": "#ffffff",
+ "backgroundColor": "#f1f2f4",
"borderRadius": 2,
"marginBottom": 8,
"marginRight": 8,
@@ -26083,7 +33867,7 @@ exports[`Storyshots Message list message 1`] = `
"minWidth": 46.3,
},
Object {
- "borderColor": "#e1e5e8",
+ "borderColor": "#1d74f5",
},
]
}
@@ -26163,7 +33947,7 @@ exports[`Storyshots Message list message 1`] = `
onStartShouldSetResponder={[Function]}
style={
Object {
- "backgroundColor": "#ffffff",
+ "backgroundColor": "#f1f2f4",
"borderRadius": 2,
"marginBottom": 8,
"marginRight": 8,
@@ -26185,7 +33969,7 @@ exports[`Storyshots Message list message 1`] = `
"minWidth": 46.3,
},
Object {
- "borderColor": "#e1e5e8",
+ "borderColor": "#1d74f5",
},
]
}
@@ -26265,7 +34049,7 @@ exports[`Storyshots Message list message 1`] = `
onStartShouldSetResponder={[Function]}
style={
Object {
- "backgroundColor": "#ffffff",
+ "backgroundColor": "#f1f2f4",
"borderRadius": 2,
"marginBottom": 8,
"marginRight": 8,
@@ -26287,7 +34071,7 @@ exports[`Storyshots Message list message 1`] = `
"minWidth": 46.3,
},
Object {
- "borderColor": "#e1e5e8",
+ "borderColor": "#1d74f5",
},
]
}
@@ -26345,7 +34129,7 @@ exports[`Storyshots Message list message 1`] = `
onStartShouldSetResponder={[Function]}
style={
Object {
- "backgroundColor": "#ffffff",
+ "backgroundColor": "#f1f2f4",
"borderRadius": 2,
"marginBottom": 8,
"marginRight": 8,
@@ -26367,7 +34151,7 @@ exports[`Storyshots Message list message 1`] = `
"minWidth": 46.3,
},
Object {
- "borderColor": "#e1e5e8",
+ "borderColor": "#1d74f5",
},
]
}
@@ -26425,7 +34209,7 @@ exports[`Storyshots Message list message 1`] = `
onStartShouldSetResponder={[Function]}
style={
Object {
- "backgroundColor": "#ffffff",
+ "backgroundColor": "#f1f2f4",
"borderRadius": 2,
"marginBottom": 8,
"marginRight": 8,
@@ -26447,7 +34231,7 @@ exports[`Storyshots Message list message 1`] = `
"minWidth": 46.3,
},
Object {
- "borderColor": "#e1e5e8",
+ "borderColor": "#1d74f5",
},
]
}
@@ -26505,7 +34289,7 @@ exports[`Storyshots Message list message 1`] = `
onStartShouldSetResponder={[Function]}
style={
Object {
- "backgroundColor": "#ffffff",
+ "backgroundColor": "#f1f2f4",
"borderRadius": 2,
"marginBottom": 8,
"marginRight": 8,
@@ -26527,7 +34311,7 @@ exports[`Storyshots Message list message 1`] = `
"minWidth": 46.3,
},
Object {
- "borderColor": "#e1e5e8",
+ "borderColor": "#1d74f5",
},
]
}
@@ -26585,7 +34369,7 @@ exports[`Storyshots Message list message 1`] = `
onStartShouldSetResponder={[Function]}
style={
Object {
- "backgroundColor": "#ffffff",
+ "backgroundColor": "#f1f2f4",
"borderRadius": 2,
"marginBottom": 8,
"marginRight": 8,
@@ -26607,7 +34391,7 @@ exports[`Storyshots Message list message 1`] = `
"minWidth": 46.3,
},
Object {
- "borderColor": "#e1e5e8",
+ "borderColor": "#1d74f5",
},
]
}
@@ -26720,27 +34504,19 @@ exports[`Storyshots Message list message 1`] = `
-
- Intercalated users
-
+
+
+`;
+
+exports[`Storyshots Message Sequential thread messages following thread button 1`] = `
+
+
@@ -26879,8 +34656,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -26903,7 +34680,7 @@ exports[`Storyshots Message list message 1`] = `
]
}
>
- rocket.cat
+ diego.mello
- Fourth message
+ How are you?
+
+
+
+ Reply
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I'm fine!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sent an attachment
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Sequential thread messages following thread reply 1`] = `
+
+
+
+
+
+
+
+
+
+
+ How are you?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I'm fine!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cool!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sent an attachment
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Static avatar 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ Message
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message System messages 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ Message removed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ has joined the channel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ Message pinned
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ has left the channel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ User rocket.cat removed by diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ User rocket.cat added by diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ User rocket.cat muted by diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ User rocket.cat unmuted by diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat was set admin by diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat is no longer admin by diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Room name changed to: New name by diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Room description changed to: new description by diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Room announcement changed to: new announcement by diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Room topic changed to: new topic by diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Room type changed to: public by diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This room's encryption has been disabled by diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This room's encryption has been enabled by diego.mello
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Temp 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ Broadcasted message
+
+
+
+
+
+
+
+
+
+ Reply
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Time format 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10 November 2017
+
+
+
+
+
+ Testing
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message Two short custom fields with markdown 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+ Message
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+ Custom fields
+
+
+
+
+
+ Field 1
+
+
+
+ Value 1
+
+
+
+
+
+ Field 2
+
+
+
+
+ Value 2
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+ Custom fields 2
+
+
+
+
+
+ Field 1
+
+
+
+ Value 1
+
+
+
+
+
+ Field 2
+
+
+
+ Value 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message URL 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+
+
+
+
+ Rocket.Chat - Free, Open Source, Enterprise Team Chat
+
+
+ Rocket.Chat is the leading open source team chat software solution. Free, unlimited and completely customizable with on-premises and SaaS cloud hosting.
+
+
+
+
+
+
+ Google
+
+
+ Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for.
+
+
+
@@ -27102,6 +40853,7 @@ exports[`Storyshots Message list message 1`] = `
"alignItems": "center",
"flex": 1,
"flexDirection": "row",
+ "justifyContent": "space-between",
}
}
>
@@ -27118,8 +40870,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -27185,7 +40937,7 @@ exports[`Storyshots Message list message 1`] = `
}
>
- Third message
+ Message
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
- 10:00 AM
-
-
-
-
-
- Second message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
+ Google
-
-
- 10:00 AM
-
-
-
-
- First message
+ Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for.
-
+
-
- Date and Unread separators
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
- 10:00 AM
-
-
-
-
-
- Fourth message
-
-
-
-
-
-
-
-
-
-
- unread
-
-
-
- November 10, 2017
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- Third message
-
-
-
-
-
-
-
-
-
-
- unread
-
-
-
-
-
-
- Second message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
- 10:00 AM
-
-
-
-
-
- Second message
-
-
-
-
-
-
-
-
-
-
-
- November 10, 2017
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- First message
-
-
-
-
-
-
-
-
-
- With image
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
+
-
-
-
-
+ Google
+
+ Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for.
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Message With alias 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Diego Mello
- This is a description
+ @
+ diego.mello
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
-
-
-
-
-
-
-
-
-
- This is a description
-
-
-
-
-
-
-
-
-
-
-
-
-
- With video
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
+
- 10:00 AM
-
-
-
-
-
-
-
-
-
-
- This is a description
-
-
-
-
-
+ >
+ Message
+
+
+
@@ -30043,7 +41567,7 @@ exports[`Storyshots Message list message 1`] = `
Object {
"headers": undefined,
"priority": "high",
- "uri": "https://open.rocket.chat/avatar/diego.mello?format=png&size=36",
+ "uri": "https://open.rocket.chat/avatar/Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.?format=png&size=36",
}
}
style={
@@ -30078,6 +41602,7 @@ exports[`Storyshots Message list message 1`] = `
"alignItems": "center",
"flex": 1,
"flexDirection": "row",
+ "justifyContent": "space-between",
}
}
>
@@ -30094,8 +41619,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -30118,7 +41643,26 @@ exports[`Storyshots Message list message 1`] = `
]
}
>
- diego.mello
+ Diego Mello
+
+ @
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
-
-
+
-
+
+ Message
+
@@ -30191,27 +41739,19 @@ exports[`Storyshots Message list message 1`] = `
-
- With audio
-
+
+
+`;
+
+exports[`Storyshots Message With audio 1`] = `
+
+
@@ -30350,8 +41891,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -31300,27 +42841,19 @@ exports[`Storyshots Message list message 1`] = `
-
- With file
-
+
+
+`;
+
+exports[`Storyshots Message With file 1`] = `
+
+
@@ -31459,8 +42993,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -31892,27 +43426,19 @@ exports[`Storyshots Message list message 1`] = `
-
- Message with reply
-
+
+
+`;
+
+exports[`Storyshots Message With image 1`] = `
+
+
-
@@ -32051,8 +43579,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -32098,55 +43626,7 @@ exports[`Storyshots Message list message 1`] = `
10:00 AM
-
-
-
- I'm fine!
-
-
-
+
-
+
-
- I'm a very long long title and I'll break
-
-
- 10:00 AM
-
+ "bottom": 0,
+ "left": 0,
+ "position": "absolute",
+ "right": 0,
+ "top": 0,
+ }
+ }
+ />
+
- How are you?
+ This is a description
@@ -32323,12 +43798,12 @@ exports[`Storyshots Message list message 1`] = `
style={
Array [
Object {
- "borderRadius": 4,
- "height": 36,
- "width": 36,
+ "borderRadius": 2,
+ "height": 20,
+ "width": 20,
},
Object {
- "marginTop": 4,
+ "marginLeft": 16,
},
]
}
@@ -32356,9 +43831,9 @@ exports[`Storyshots Message list message 1`] = `
"overflow": "hidden",
},
Object {
- "borderRadius": 4,
- "height": 36,
- "width": 36,
+ "borderRadius": 2,
+ "height": 20,
+ "width": 20,
},
]
}
@@ -32398,12 +43873,14 @@ exports[`Storyshots Message list message 1`] = `
]
}
>
-
@@ -32420,8 +43897,8 @@ exports[`Storyshots Message list message 1`] = `
style={
Object {
"alignItems": "center",
- "flex": 1,
"flexDirection": "row",
+ "flexShrink": 1,
"opacity": 1,
}
}
@@ -32467,55 +43944,7 @@ exports[`Storyshots Message list message 1`] = `
10:00 AM
-
-
-
- I'm fine!
-
-
-
+
-
+
-
- rocket.cat
-
-
- 10:00 AM
-
+ "bottom": 0,
+ "left": 0,
+ "position": "absolute",
+ "right": 0,
+ "top": 0,
+ }
+ }
+ />
+
- How are you?
+ This is a description
-
- Message with read receipt
-
+
+
+`;
+
+exports[`Storyshots Message With video 1`] = `
+
+
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- I'm fine!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- I'm fine!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- I'm fine!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- I'm fine!
-
-
-
-
-
-
-
-
-
-
-
-
- Message with thread
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- How are you?
-
-
-
-
-
-
- Reply
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- How are you?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- I'm fine!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Thread with emoji🙂 😂
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- I'm fine!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Markdown: link block code
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- I'm fine!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- I'm fine!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- How are you?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Thread with attachment
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sent an attachment
-
-
-
-
-
-
-
-
- Sequential thread messages following thread button
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- How are you?
-
-
-
-
-
-
- Reply
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- I'm fine!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sent an attachment
-
-
-
-
-
-
-
-
- Sequential thread messages following thread reply
-
-
-
-
-
-
-
-
-
- How are you?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- I'm fine!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Cool!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sent an attachment
-
-
-
-
-
-
-
-
- Discussion
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
- Started a discussion:
-
-
- This is a discussion
-
-
-
-
-
-
-
- No messages yet
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
- Started a discussion:
-
-
- This is a discussion
-
-
-
-
-
-
-
- 1 message
-
-
-
- November 10, 2017
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
- Started a discussion:
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-
-
-
-
-
-
-
- 10 messages
-
-
-
- November 10, 2017
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
- Started a discussion:
-
-
- This is a discussion
-
-
-
-
-
-
-
- +999 messages
-
-
-
- November 10, 2017
-
-
-
-
-
-
-
-
- URL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
-
-
-
-
- Rocket.Chat - Free, Open Source, Enterprise Team Chat
-
-
- Rocket.Chat is the leading open source team chat software solution. Free, unlimited and completely customizable with on-premises and SaaS cloud hosting.
-
-
-
-
-
-
- Google
-
-
- Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- Message
-
-
-
-
-
-
-
-
-
- Google
-
-
- Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Google
-
-
- Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for.
-
-
-
-
-
-
-
-
-
- Custom fields
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- Message
-
-
-
-
-
-
-
- rocket.cat
-
-
- 10:00 AM
-
-
-
-
- Custom fields
-
-
-
-
-
- Field 1
-
-
-
- Value 1
-
-
-
-
-
- Field 2
-
-
-
- Value 2
-
-
-
-
-
- Field 3
-
-
-
- Value 3
-
-
-
-
-
- Field 4
-
-
-
- Value 4
-
-
-
-
-
- Field 5
-
-
-
- Value 5
-
-
-
-
-
-
-
-
-
-
-
-
- Two short custom fields with markdown
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- Message
-
-
-
-
-
-
-
- rocket.cat
-
-
- 10:00 AM
-
-
-
-
- Custom fields
-
-
-
-
-
- Field 1
-
-
-
- Value 1
-
-
-
-
-
- Field 2
-
-
-
-
- Value 2
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
- 10:00 AM
-
-
-
-
- Custom fields 2
-
-
-
-
-
- Field 1
-
-
-
- Value 1
-
-
-
-
-
- Field 2
-
-
-
- Value 2
-
-
-
-
-
-
-
-
-
-
-
-
- Colored attachments
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
-
-
-
- Field 1
-
-
-
- Value 1
-
-
-
-
-
- Field 2
-
-
-
- Value 2
-
-
-
-
-
-
-
-
-
-
-
- Field 1
-
-
-
- Value 1
-
-
-
-
-
- Field 2
-
-
-
- Value 2
-
-
-
-
-
-
-
-
-
-
-
- Field 1
-
-
-
- Value 1
-
-
-
-
-
- Field 2
-
-
-
- Value 2
-
-
-
-
-
-
-
-
-
-
-
- Invalid color
-
-
-
-
-
-
-
-
-
-
-
- Broadcast
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- Broadcasted message
-
-
-
-
-
-
-
-
-
- Reply
-
-
-
-
-
-
-
-
-
- Archived
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- This message is inside an archived room
-
-
-
-
-
-
-
-
-
- Error
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
-
-
-
-
-
- This message has error
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
-
-
-
-
-
- This message has error too
-
-
-
-
-
-
-
-
- Temp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- Temp message
-
-
-
-
-
-
-
-
-
- Editing
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- Message being edited
-
-
-
-
-
-
-
-
-
- Removed
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- Message removed
-
-
-
-
-
-
-
-
- Joined
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- has joined the channel
-
-
-
-
-
-
-
-
- Room name changed
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Room name changed to: New name by diego.mello
-
-
-
-
-
-
-
- Message pinned
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- Message pinned
-
-
-
-
-
-
-
-
- Has left the channel
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- has left the channel
-
-
-
-
-
-
-
-
- User removed
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- User rocket.cat removed by diego.mello
-
-
-
-
-
-
-
- User added
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- User rocket.cat added by diego.mello
-
-
-
-
-
-
-
- User muted
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- User rocket.cat muted by diego.mello
-
-
-
-
-
-
-
- User unmuted
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- User rocket.cat unmuted by diego.mello
-
-
-
-
-
-
-
- Role added
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat was set admin by diego.mello
-
-
-
-
-
-
-
- Role removed
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat is no longer admin by diego.mello
-
-
-
-
-
-
-
- Changed description
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Room description changed to: new description by diego.mello
-
-
-
-
-
-
-
- Changed announcement
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Room announcement changed to: new announcement by diego.mello
-
-
-
-
-
-
-
- Changed topic
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Room topic changed to: new topic by diego.mello
-
-
-
-
-
-
-
- Changed type
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Room type changed to: public by diego.mello
-
-
-
-
-
-
-
- Toggle e2e encryption
-
-
-
-
-
-
-
-
-
-
-
-
+
+ diego.mello
+
+
+
+ 10:00 AM
+
+
+
+
+
+
+
+
+
+
+ This is a description
+
+
-
+
-
- Ignored
-
-
+
+
+
+ diego.mello
+
+
- Message ignored. Tap to display it.
+ 10:00 AM
+
+
+
+
+
+
@@ -46576,27 +44790,19 @@ exports[`Storyshots Message list message 1`] = `
-
- Custom style
-
+
+
+`;
+
+exports[`Storyshots Message Without header 1`] = `
+
+
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
- Markdown emphasis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- Italic with single
-
-
- underscore
-
-
- or double
-
-
- underscores
-
-
- . Bold with single
-
-
- asterisk
-
-
- or double
-
-
- asterisks
-
-
- . Strikethrough with single
-
-
- Strikethrough
-
-
- or double
-
-
- Strikethrough
-
-
-
-
-
-
-
-
-
- Markdown headers
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- H1
-
-
-
-
- H2
-
-
-
-
- H3
-
-
-
-
- H4
-
-
-
-
- H5
-
-
-
-
- H6
-
-
-
-
-
-
-
-
-
- Markdown links
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- Support
-
-
-
- Google
-
-
-
-
-
-
-
- I\`m an inline-style link
-
-
-
-
-
-
-
- https://google.com
-
-
-
-
-
-
-
-
-
-
- Starting with empty link
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- <- No link should render
-
-
-
-
-
-
-
-
-
- Markdown image
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
-
-
-
-
-
-
-
-
- Markdown code
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
- Inline
-
-
- code
-
-
- has
-
-
- back-ticks around
-
-
- it.
-
-
-
- Code block
-
-
-
-
-
-
-
-
-
- Markdown quote
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
-
-
-
- Quote
-
-
-
-
-
-
-
-
-
-
-
- Markdown table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
- 10:00 AM
-
-
-
-
-
-
-
-
-
-
-
- First Header
-
-
-
-
-
-
- Second Header
-
-
-
-
-
-
-
-
- Content from cell 1
-
-
-
-
-
-
- Content from cell 2
-
-
-
-
-
-
-
-
- Content in the first column
-
-
-
-
-
-
- Content in the second column
-
-
-
-
-
-
-
-
- Click to see full table
-
-
-
-
-
-
-
-
`;
-exports[`Storyshots RoomHeader icons 1`] = `
-Array [
-
-
-
-
-
-
-
-
-
- private channel
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- public channel
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- discussion
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- omnichannel
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- private team
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- public team
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- group dm
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- online dm
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- away dm
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- busy dm
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- loading dm
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- offline dm
-
-
-
-
-
- ,
-]
-`;
-
-exports[`Storyshots RoomHeader landscape 1`] = `
-Array [
-
-
-
-
-
-
-
-
-
- title
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- title
-
-
-
- subtitle
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
-
-
-
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
-
-
-
-
- ,
-]
-`;
-
-exports[`Storyshots RoomHeader themes 1`] = `
-Array [
-
-
-
-
-
-
-
-
-
- title
-
-
-
- subtitle
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- title
-
-
-
- subtitle
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- title
-
-
-
- subtitle
-
-
-
-
- ,
-]
-`;
-
-exports[`Storyshots RoomHeader thread 1`] = `
-Array [
-
-
-
-
-
-
- title
-
-
-
-
-
-
-
- parent title
-
-
-
-
-
- ,
-
-
-
-
-
-
- markdown preview #3 4 5
-
-
-
-
-
-
-
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
-
-
-
-
-
- ,
-]
-`;
-
-exports[`Storyshots RoomHeader title and subtitle 1`] = `
-Array [
-
-
-
-
-
-
-
-
-
- title
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- title
-
-
-
- subtitle
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- title
-
-
-
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
-
-
-
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
-
-
-
-
- ,
-]
-`;
-
-exports[`Storyshots RoomHeader typing 1`] = `
-Array [
-
-
-
-
-
-
-
-
-
- title
-
-
-
-
- user 1
-
-
- is typing
- ...
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- title
-
-
-
-
- user 1 and user 2
-
-
- are typing
- ...
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
- title
-
-
-
-
- user 1, user 2, user 3, user 4, user 5
-
-
- are typing
- ...
-
-
-
-
- ,
-]
-`;
-
-exports[`Storyshots RoomItem list roomitem 1`] = `
+exports[`Storyshots Room Item Alerts 1`] = `
-
- Basic
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
- User
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- diego.mello
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
-
-
-
-
-
-
-
- Type
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
- User status
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Read
-
-
-
-
-
-
-
-
-
-
- Favorite
-
-
-
-
-
-
-
- Hide
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rocket.cat
-
-
-
-
-
-
-
- Alerts
-
@@ -63043,6 +47453,24 @@ exports[`Storyshots RoomItem list roomitem 1`] = `
+
+ User status
+
-
+
+`;
+
+exports[`Storyshots Room Item Basic 1`] = `
+
+
+
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+ Favorite
+
+
+
+
+
+
+
+ Hide
+
+
+
+
- Last Message
-
+ "transform": Array [
+ Object {
+ "translateX": 0,
+ },
+ ],
+ }
+ }
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Room Item Last Message 1`] = `
+
+
- rocket.cat
+ unread
- rocket.cat
+ unread
- rocket.cat
+ user mentions
- rocket.cat
+ group mentions
`;
+exports[`Storyshots Room Item Type 1`] = `
+
+
+
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+ Favorite
+
+
+
+
+
+
+
+ Hide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+ Favorite
+
+
+
+
+
+
+
+ Hide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+ Favorite
+
+
+
+
+
+
+
+ Hide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+ Favorite
+
+
+
+
+
+
+
+ Hide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+
+ Last Message
+
+
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+ Favorite
+
+
+
+
+
+
+
+ Hide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+ Favorite
+
+
+
+
+
+
+
+ Hide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+ Favorite
+
+
+
+
+
+
+
+ Hide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Room Item User 1`] = `
+
+
+
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+ Favorite
+
+
+
+
+
+
+
+ Hide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diego.mello
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+ Favorite
+
+
+
+
+
+
+
+ Hide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Storyshots Room Item User status 1`] = `
+
+
+
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+ Favorite
+
+
+
+
+
+
+
+ Hide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+ Favorite
+
+
+
+
+
+
+
+ Hide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+
+
+`;
+
exports[`Storyshots ServerItem content 1`] = `
Array [
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+ Rocket.Chat
+
+
+ https://open.rocket.chat/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+ ,
+]
+`;
+
+exports[`Storyshots ServerItem touchable 1`] = `
+Array [
+
+
+
+
+
+
+
+ Rocket.Chat
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+ Rocket.Chat
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+ ,
+]
+`;
+
+exports[`Storyshots RoomHeader icons 1`] = `
+Array [
+
+
+
+
+
+
+
+
+
+ private channel
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ public channel
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ discussion
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ omnichannel
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ private team
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ public team
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ group dm
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ online dm
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ away dm
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ busy dm
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ loading dm
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ offline dm
+
+
+
+
+
+ ,
+]
+`;
+
+exports[`Storyshots RoomHeader landscape 1`] = `
+Array [
+
+
+
+
+
+
+
+
+
+ title
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ title
+
+
+
+ subtitle
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
+
+
+ ,
+]
+`;
+
+exports[`Storyshots RoomHeader themes 1`] = `
+Array [
+
+
+
+
+
+
+
+
+
+ title
+
+
+
+ subtitle
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ title
+
+
+
+ subtitle
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ title
+
+
+
+ subtitle
+
+
+
+
+ ,
+]
+`;
+
+exports[`Storyshots RoomHeader thread 1`] = `
+Array [
+
+
+
+
+
+
+ title
+
+
+
+
+
+
+
+
+
+
+
+
+ +999
+
+
+
+
+ parent title
+
+
+
+
+
+ ,
+
+
+
+
+
+
+ markdown preview #3 4 5
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
+
+
+
+ ,
+]
+`;
+
+exports[`Storyshots RoomHeader title and subtitle 1`] = `
+Array [
+
+
+
+
+
+
+
+
+
+ title
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ title
+
+
+
+ subtitle
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ title
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
+
+
+ ,
+]
+`;
+
+exports[`Storyshots RoomHeader typing 1`] = `
+Array [
+
+
+
+
+
+
+
+
+
+ title
+
+
+
+
+ user 1
+
+
+ is typing
+ ...
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ title
+
+
+
+
+ user 1 and user 2
+
+
+ are typing
+ ...
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+ title
+
+
+
+
+ user 1, user 2, user 3, user 4, user 5
+
+
+ are typing
+ ...
+
+
+
+
+ ,
+]
+`;
+
+exports[`Storyshots ServerItem content 1`] = `
+Array [
+
+
+
+
+
+
+
+ Rocket.Chat
+
+
+ https://open.rocket.chat/
+
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+ Super Long Server Name in Rocket.Chat
+
+
+ https://superlongservername.tologintoasuperlongservername/
+
+
+
+ ,
+
+
+
+
+
+
+
+ https://stable.rocket.chat/
+
+
+ https://stable.rocket.chat/
+
+
+
+ ,
+]
+`;
+
+exports[`Storyshots ServerItem themes 1`] = `
+Array [
+
+
+
+
+
+
+
+ Rocket.Chat
+
+
+ https://open.rocket.chat/
+
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+ Rocket.Chat
+
+
+ https://open.rocket.chat/
+
+
`;
-exports[`Storyshots UiKitMessage list uikitmessage 1`] = `
-
-
+
-
-
- Section
-
-
- Section + Markdown List
-
-
- Section + Overflow
-
-
- Section + image
-
-
- Section + button
-
-
- Section + Select
-
-
- Section + DatePicker
-
-
- Section + Multi Select
-
-
- Image
-
-
- Context
-
-
- Action - Buttons
-
-
- Fields
-
-
- Action - Select
-
-
-
-
+ }
+ />
+
+
`;
-exports[`Storyshots UiKitModal list UiKitModal 1`] = `
-
-
+
+
+
+`;
+
+exports[`Storyshots UiKitMessage Context 1`] = `
+
+
+
-
-
- Modal - Section and Selects
-
-
+
+
+`;
+
+exports[`Storyshots UiKitMessage Fields 1`] = `
+
+
+
- Modal - Section Accessories
-
-
+
+
+`;
+
+exports[`Storyshots UiKitMessage Image 1`] = `
+
+
+
- Modal - Form Input
-
-
+
+
+`;
+
+exports[`Storyshots UiKitMessage Section + DatePicker 1`] = `
+
+
+
- Modal - Form TextArea
-
-
+
+
+`;
+
+exports[`Storyshots UiKitMessage Section + Markdown List 1`] = `
+
+
+
- Modal - Images
-
-
+
+
+`;
+
+exports[`Storyshots UiKitMessage Section + Multi Select 1`] = `
+
+
+
- Modal - Actions
-
-
+
+
+`;
+
+exports[`Storyshots UiKitMessage Section + Overflow 1`] = `
+
+
+
- Modal - Contexts and Dividers
-
-
+
+
+`;
+
+exports[`Storyshots UiKitMessage Section + Select 1`] = `
+
+
+
- Modal - Input with error
-
-
+
+
+`;
+
+exports[`Storyshots UiKitMessage Section + button 1`] = `
+
+
+
- Modal - Multilne with error
-
-
+
+
+`;
+
+exports[`Storyshots UiKitMessage Section + image 1`] = `
+
+
+
- Modal - DatePicker with error
-
-
-
-
+ }
+ />
+
+
+`;
+
+exports[`Storyshots UiKitMessage Section 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots UiKitModal Modal - Actions 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots UiKitModal Modal - Contexts and Dividers 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots UiKitModal Modal - DatePicker with error 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots UiKitModal Modal - Form Input 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots UiKitModal Modal - Form TextArea 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots UiKitModal Modal - Images 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots UiKitModal Modal - Input with error 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots UiKitModal Modal - Multilne with error 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots UiKitModal Modal - Section Accessories 1`] = `
+
+
+
+
+
+`;
+
+exports[`Storyshots UiKitModal Modal - Section and Selects 1`] = `
+
+
+
+
+
`;
exports[`Storyshots Unread Badge all 1`] = `
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 8e55d11da..69975e5d7 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -144,7 +144,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode VERSIONCODE as Integer
- versionName "4.16.1"
+ versionName "4.16.2"
vectorDrawables.useSupportLibrary = true
if (!isFoss) {
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
diff --git a/app/containers/MessageBox/index.js b/app/containers/MessageBox/index.js
index 1fc874f9f..213f27d51 100644
--- a/app/containers/MessageBox/index.js
+++ b/app/containers/MessageBox/index.js
@@ -876,7 +876,7 @@ class MessageBox extends Component {
recording, showEmojiKeyboard, showSend, mentions, trackingType, commandPreview, showCommandPreview
} = this.state;
const {
- editing, message, replying, replyCancel, user, getCustomEmoji, theme, Message_AudioRecorderEnabled, children, isActionsEnabled
+ editing, message, replying, replyCancel, user, getCustomEmoji, theme, Message_AudioRecorderEnabled, children, isActionsEnabled, tmid
} = this.props;
const isAndroidTablet = isTablet && isAndroid ? {
@@ -936,7 +936,7 @@ class MessageBox extends Component {
underlineColorAndroid='transparent'
defaultValue=''
multiline
- testID='messagebox-input'
+ testID={`messagebox-input${ tmid ? '-thread' : '' }`}
theme={theme}
{...isAndroidTablet}
/>
diff --git a/app/containers/message/User.js b/app/containers/message/User.js
index cd4559b42..98b449849 100644
--- a/app/containers/message/User.js
+++ b/app/containers/message/User.js
@@ -18,6 +18,7 @@ const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'row',
+ justifyContent: 'space-between',
alignItems: 'center'
},
username: {
@@ -30,7 +31,7 @@ const styles = StyleSheet.create({
...sharedStyles.textMedium
},
titleContainer: {
- flex: 1,
+ flexShrink: 1,
flexDirection: 'row',
alignItems: 'center'
},
diff --git a/app/i18n/index.js b/app/i18n/index.js
index c82e9e17e..ebe430769 100644
--- a/app/i18n/index.js
+++ b/app/i18n/index.js
@@ -95,6 +95,7 @@ export const setLanguage = (l) => {
moment.locale(toMomentLocale(locale));
};
+i18n.translations = { en: translations.en?.() };
const defaultLanguage = { languageTag: 'en', isRTL: false };
const availableLanguages = Object.keys(translations);
const { languageTag } = RNLocalize.findBestAvailableLanguage(availableLanguages) || defaultLanguage;
diff --git a/app/i18n/locales/nl.json b/app/i18n/locales/nl.json
index 903da5e1f..fee4b826f 100644
--- a/app/i18n/locales/nl.json
+++ b/app/i18n/locales/nl.json
@@ -123,7 +123,6 @@
"creating_invite": "uitnodiging maken",
"Channel_Name": "Kanaal Name",
"Channels": "Kanalen",
- "Chats": "Chats",
"Call_already_ended": "Gesprek al beeïndigd!",
"Click_to_join": "Klik om lid te worden!",
"Close": "Sluiten",
diff --git a/app/utils/log/events.js b/app/utils/log/events.js
index fc8d70420..c9c9579f8 100644
--- a/app/utils/log/events.js
+++ b/app/utils/log/events.js
@@ -51,6 +51,7 @@ export default {
STATUS_F: 'status_f',
STATUS_CUSTOM: 'status_custom',
STATUS_CUSTOM_F: 'status_custom_f',
+ SET_STATUS_FAIL: 'set_status_fail',
// ROOMS LIST VIEW
RL_TOGGLE_SERVER_DROPDOWN: 'rl_toggle_server_dropdown',
diff --git a/app/views/RoomActionsView/index.js b/app/views/RoomActionsView/index.js
index 89bc5f229..ea833d758 100644
--- a/app/views/RoomActionsView/index.js
+++ b/app/views/RoomActionsView/index.js
@@ -595,7 +595,7 @@ class RoomActionsView extends React.Component {
return (
-
+
{this.renderRoomInfo()}
{this.renderJitsi()}
{this.renderE2EEncryption()}
diff --git a/app/views/StatusView.js b/app/views/StatusView.js
index 4441169f5..2b6bc33d7 100644
--- a/app/views/StatusView.js
+++ b/app/views/StatusView.js
@@ -91,7 +91,7 @@ class StatusView extends React.Component {
const { statusText } = this.state;
const { user } = this.props;
if (statusText !== user.statusText) {
- await this.setCustomStatus();
+ await this.setCustomStatus(statusText);
}
this.close();
}
diff --git a/e2e/data.js b/e2e/data.js
index 77f9f82c0..1a84ff9fb 100644
--- a/e2e/data.js
+++ b/e2e/data.js
@@ -57,6 +57,11 @@ const data = {
password: `passwordthree${ value }`,
email: `mobile+registeringthree${ value }@rocket.chat`
},
+ registeringUser4: {
+ username: `newuserfour${ value }`,
+ password: `passwordfour${ value }`,
+ email: `mobile+registeringfour${ value }@rocket.chat`
+ },
random: value
}
module.exports = data;
diff --git a/e2e/helpers/app.js b/e2e/helpers/app.js
index 2706eb2f6..af72f73d1 100644
--- a/e2e/helpers/app.js
+++ b/e2e/helpers/app.js
@@ -7,8 +7,7 @@ async function navigateToWorkspace(server = data.server) {
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(10000);
await element(by.id('join-workspace')).tap();
await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000);
- await element(by.id('new-server-view-input')).replaceText(server);
- await element(by.id('new-server-view-button')).tap();
+ await element(by.id('new-server-view-input')).typeText(`${server}\n`);
await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(60000);
await expect(element(by.id('workspace-view'))).toBeVisible();
}
@@ -33,7 +32,7 @@ async function login(username, password) {
await element(by.id('login-view-email')).replaceText(username);
await element(by.id('login-view-password')).replaceText(password);
await element(by.id('login-view-submit')).tap();
- await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);
+ await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(30000);
}
async function logout() {
@@ -52,24 +51,24 @@ async function logout() {
await expect(element(by.id('onboarding-view'))).toBeVisible();
}
-async function mockMessage(message) {
- await element(by.id('messagebox-input')).atIndex(0).tap();
- await element(by.id('messagebox-input')).atIndex(0).typeText(`${ data.random }${ message }`);
- await element(by.id('messagebox-send-message')).atIndex(0).tap();
- await waitFor(element(by.label(`${ data.random }${ message }`)).atIndex(0)).toExist().withTimeout(60000);
- await expect(element(by.label(`${ data.random }${ message }`)).atIndex(0)).toExist();
+async function mockMessage(message, isThread = false) {
+ let input = isThread ? 'messagebox-input-thread' : 'messagebox-input';
+ await element(by.id(input)).tap();
+ await element(by.id(input)).typeText(`${ data.random }${ message }`);
+ await element(by.id('messagebox-send-message')).tap();
+ await waitFor(element(by.label(`${ data.random }${ message }`))).toExist().withTimeout(60000);
+ await expect(element(by.label(`${ data.random }${ message }`))).toExist();
await element(by.label(`${ data.random }${ message }`)).atIndex(0).tap();
};
async function starMessage(message){
const messageLabel = `${ data.random }${ message }`
- await waitFor(element(by.label(messageLabel))).toBeVisible().withTimeout(5000);
await element(by.label(messageLabel)).atIndex(0).longPress();
await expect(element(by.id('action-sheet'))).toExist();
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);
await element(by.label('Star')).tap();
- await waitFor(element(by.id('action-sheet'))).toNotExist().withTimeout(5000);
+ await waitFor(element(by.id('action-sheet'))).not.toExist().withTimeout(5000);
};
async function pinMessage(message){
@@ -80,7 +79,7 @@ async function pinMessage(message){
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);
await element(by.label('Pin')).tap();
- await waitFor(element(by.id('action-sheet'))).toNotExist().withTimeout(5000);
+ await waitFor(element(by.id('action-sheet'))).not.toExist().withTimeout(5000);
}
async function dismissReviewNag(){
diff --git a/e2e/helpers/data_setup.js b/e2e/helpers/data_setup.js
index 66c6ea086..1f8f8fb65 100644
--- a/e2e/helpers/data_setup.js
+++ b/e2e/helpers/data_setup.js
@@ -20,6 +20,7 @@ const login = async (username, password) => {
const authToken = response.data.data.authToken
rocketchat.defaults.headers.common['X-User-Id'] = userId
rocketchat.defaults.headers.common['X-Auth-Token'] = authToken
+ return { authToken, userId };
}
const createUser = async (username, password, name, email) => {
@@ -91,11 +92,11 @@ const changeChannelJoinCode = async (roomId, joinCode) => {
}
}
-const sendMessage = async (user, groupname, msg) => {
- console.log(`Sending message to ${groupname}`)
+const sendMessage = async (user, channel, msg) => {
+ console.log(`Sending message to ${channel}`)
try {
await login(user.username, user.password);
- await rocketchat.post('chat.postMessage', { channel: `#${groupname}`, msg });
+ await rocketchat.post('chat.postMessage', { channel, msg });
} catch (infoError) {
console.log(JSON.stringify(infoError))
throw "Failed to find or create private group"
@@ -146,5 +147,5 @@ const post = (endpoint, body) => {
}
module.exports = {
- setup, sendMessage, get, post
+ setup, sendMessage, get, post, login
}
\ No newline at end of file
diff --git a/e2e/tests/assorted/01-e2eencryption.spec.js b/e2e/tests/assorted/01-e2eencryption.spec.js
index dc85cb7b5..423d96152 100644
--- a/e2e/tests/assorted/01-e2eencryption.spec.js
+++ b/e2e/tests/assorted/01-e2eencryption.spec.js
@@ -166,7 +166,7 @@ describe('E2E Encryption', () => {
await navigateToLogin();
await login(testuser.username, testuser.password);
await navigateToRoom(room);
- await waitFor(element(by.label(`${ data.random }message`)).atIndex(0)).toNotExist().withTimeout(2000);
+ await waitFor(element(by.label(`${ data.random }message`)).atIndex(0)).not.toExist().withTimeout(2000);
await expect(element(by.label('Encrypted message')).atIndex(0)).toExist();
});
@@ -178,7 +178,7 @@ describe('E2E Encryption', () => {
await waitFor(element(by.id('e2e-enter-your-password-view'))).toBeVisible().withTimeout(2000);
await element(by.id('e2e-enter-your-password-view-password')).typeText(newPassword);
await element(by.id('e2e-enter-your-password-view-confirm')).tap();
- await waitFor(element(by.id('listheader-encryption'))).toNotExist().withTimeout(10000);
+ await waitFor(element(by.id('listheader-encryption'))).not.toExist().withTimeout(10000);
await navigateToRoom(room);
await waitFor(element(by.label(`${ data.random }message`)).atIndex(0)).toExist().withTimeout(2000);
});
@@ -221,8 +221,7 @@ describe('E2E Encryption', () => {
// TODO: refactor
await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000);
- await element(by.id('new-server-view-input')).replaceText(data.alternateServer);
- await element(by.id('new-server-view-button')).tap();
+ await element(by.id('new-server-view-input')).typeText(`${data.alternateServer}\n`);
await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(60000);
await element(by.id('workspace-view-register')).tap();
await waitFor(element(by.id('register-view'))).toBeVisible().withTimeout(2000);
@@ -231,7 +230,7 @@ describe('E2E Encryption', () => {
await element(by.id('register-view-name')).replaceText(data.registeringUser.username);
await element(by.id('register-view-username')).replaceText(data.registeringUser.username);
await element(by.id('register-view-email')).replaceText(data.registeringUser.email);
- await element(by.id('register-view-password')).replaceText(data.registeringUser.password);
+ await element(by.id('register-view-password')).typeText(data.registeringUser.password);
await element(by.id('register-view-submit')).tap();
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(60000);
diff --git a/e2e/tests/assorted/02-broadcast.spec.js b/e2e/tests/assorted/02-broadcast.spec.js
index a11f71713..059643c02 100644
--- a/e2e/tests/assorted/02-broadcast.spec.js
+++ b/e2e/tests/assorted/02-broadcast.spec.js
@@ -75,7 +75,7 @@ describe('Broadcast room', () => {
});
it('should have the message created earlier', async() => {
- await waitFor(element(by.label(`${ data.random }message`)).atIndex(0)).toBeVisible().withTimeout(60000);
+ await waitFor(element(by.label(`${ data.random }message`))).toExist().withTimeout(60000);
});
it('should have reply button', async() => {
diff --git a/e2e/tests/assorted/03-profile.spec.js b/e2e/tests/assorted/03-profile.spec.js
index f531ef18a..86fc001db 100644
--- a/e2e/tests/assorted/03-profile.spec.js
+++ b/e2e/tests/assorted/03-profile.spec.js
@@ -9,10 +9,10 @@ const profileChangeUser = data.users.profileChanges
const scrollDown = 200;
async function waitForToast() {
- // await waitFor(element(by.id('toast'))).toBeVisible().withTimeout(10000);
+ // await waitFor(element(by.id('toast'))).toBeVisible().withTimeout(1000);
// await expect(element(by.id('toast'))).toBeVisible();
- // await waitFor(element(by.id('toast'))).toBeNotVisible().withTimeout(10000);
- // await expect(element(by.id('toast'))).toBeNotVisible();
+ // await waitFor(element(by.id('toast'))).not.toBeNotVisible().withTimeout(1000);
+ // await expect(element(by.id('toast'))).not.toBeVisible();
await sleep(300);
}
@@ -76,9 +76,8 @@ describe('Profile screen', () => {
describe('Usage', async() => {
it('should change name and username', async() => {
- await element(by.type('UIScrollView')).atIndex(1).swipe('down');
await element(by.id('profile-view-name')).replaceText(`${ profileChangeUser.username }new`);
- await element(by.id('profile-view-username')).replaceText(`${ profileChangeUser.username }new`);
+ await element(by.id('profile-view-username')).typeText(`${ profileChangeUser.username }new`);
await element(by.type('UIScrollView')).atIndex(1).swipe('up');
await element(by.id('profile-view-submit')).tap();
await waitForToast();
@@ -88,9 +87,7 @@ describe('Profile screen', () => {
await element(by.id('profile-view-email')).replaceText(`mobile+profileChangesNew${ data.random }@rocket.chat`);
await element(by.id('profile-view-new-password')).replaceText(`${ profileChangeUser.password }new`);
await element(by.id('profile-view-submit')).tap();
- await element(by.type('_UIAlertControllerTextField')).replaceText(`${ profileChangeUser.password }`)
- // For some reason, replaceText does some type of submit, which submits the alert for us
- // await element(by.label('Save').and(by.type('_UIAlertControllerActionView'))).tap();
+ await element(by.type('_UIAlertControllerTextField')).typeText(`${ profileChangeUser.password }\n`)
await waitForToast();
});
diff --git a/e2e/tests/assorted/04-setting.spec.js b/e2e/tests/assorted/04-setting.spec.js
index 201ac6200..14bdbe71f 100644
--- a/e2e/tests/assorted/04-setting.spec.js
+++ b/e2e/tests/assorted/04-setting.spec.js
@@ -63,31 +63,12 @@ describe('Settings screen', () => {
});
describe('Usage', async() => {
- it('should navigate to language view', async() => {
- await element(by.id('settings-view-language')).tap();
- await waitFor(element(by.id('language-view'))).toBeVisible().withTimeout(60000);
- await expect(element(by.id('language-view-zh-CN'))).toExist();
- await expect(element(by.id('language-view-de'))).toExist();
- await expect(element(by.id('language-view-en'))).toExist();
- await expect(element(by.id('language-view-fr'))).toExist();
- await expect(element(by.id('language-view-pt-BR'))).toExist();
- await expect(element(by.id('language-view-pt-PT'))).toExist();
- await expect(element(by.id('language-view-ru'))).toExist();
- await tapBack();
- });
-
it('should tap clear cache and navigate to roomslistview', async() => {
await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000);
await element(by.id('settings-view-clear-cache')).tap();
await waitFor(element(by.text('This will clear all your offline data.'))).toExist().withTimeout(2000);
await element(by.label('Clear').and(by.type('_UIAlertControllerActionView'))).tap();
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(5000);
- // Database was cleared, so the room shouldn't be there anymore while it's fetched again from the server
- /**
- * FIXME: rooms are fetched to quickly on docker and the test below fails
- * We need to think on another way to test database being resetted
- */
- // await waitFor(element(by.id(`rooms-list-view-item-${ data.groups.private.name }`))).toNotExist().withTimeout(10000);
await waitFor(element(by.id(`rooms-list-view-item-${ data.groups.private.name }`))).toExist().withTimeout(10000);
})
});
diff --git a/e2e/tests/assorted/05-joinpublicroom.spec.js b/e2e/tests/assorted/05-joinpublicroom.spec.js
index 8e97a893e..9b92d33b3 100644
--- a/e2e/tests/assorted/05-joinpublicroom.spec.js
+++ b/e2e/tests/assorted/05-joinpublicroom.spec.js
@@ -63,7 +63,7 @@ describe('Join public room', () => {
describe('Room Actions', async() => {
before(async() => {
- await navigateToRoomActions('c');
+ await navigateToRoomActions();
});
it('should have room actions screen', async() => {
@@ -103,7 +103,6 @@ describe('Join public room', () => {
});
it('should have share', async() => {
- await element(by.type('UIScrollView')).atIndex(1).swipe('down');
await expect(element(by.id('room-actions-share'))).toBeVisible();
});
@@ -142,7 +141,7 @@ describe('Join public room', () => {
});
it('should have disable notifications and leave channel', async() => {
- await navigateToRoomActions('c');
+ await navigateToRoomActions();
await expect(element(by.id('room-actions-view'))).toBeVisible();
await expect(element(by.id('room-actions-info'))).toBeVisible();
// await expect(element(by.id('room-actions-voice'))).toBeVisible();
@@ -165,7 +164,6 @@ describe('Join public room', () => {
await expect(element(by.text('Yes, leave it!'))).toBeVisible();
await element(by.text('Yes, leave it!')).tap();
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);
- // await element(by.id('rooms-list-view-search')).typeText('');
await waitFor(element(by.id(`rooms-list-view-item-${ room }`))).toBeNotVisible().withTimeout(60000);
});
});
diff --git a/e2e/tests/assorted/06-status.spec.js b/e2e/tests/assorted/06-status.spec.js
index 45c4c6f96..52c6f9b98 100644
--- a/e2e/tests/assorted/06-status.spec.js
+++ b/e2e/tests/assorted/06-status.spec.js
@@ -41,10 +41,10 @@ describe('Status screen', () => {
});
it('should change status text', async () => {
- await element(by.id('status-view-input')).replaceText('status-text-new');
+ await element(by.id('status-view-input')).typeText('status-text-new');
await element(by.id('status-view-submit')).tap();
await waitForToast();
- await waitFor(element(by.label('status-text-new').withAncestor(by.id('sidebar-custom-status')))).toBeVisible().withTimeout(2000);
+ await waitFor(element(by.label('status-text-new').withAncestor(by.id('sidebar-custom-status')))).toExist().withTimeout(2000);
});
});
});
\ No newline at end of file
diff --git a/e2e/tests/assorted/07-changeserver.spec.js b/e2e/tests/assorted/07-changeserver.spec.js
index a795e66c3..06ac7c36a 100644
--- a/e2e/tests/assorted/07-changeserver.spec.js
+++ b/e2e/tests/assorted/07-changeserver.spec.js
@@ -24,9 +24,8 @@ describe('Change server', () => {
await element(by.id('rooms-list-header-server-add')).tap();
await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(6000);
- await element(by.id('new-server-view-input')).replaceText(data.alternateServer);
- await element(by.id('new-server-view-button')).tap();
- await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(6000);
+ await element(by.id('new-server-view-input')).typeText(`${data.alternateServer}\n`);
+ await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(10000);
await reopenAndCheckServer(data.server);
});
diff --git a/e2e/tests/assorted/08-joinprotectedroom.spec.js b/e2e/tests/assorted/08-joinprotectedroom.spec.js
index a07d541cd..9101a9659 100644
--- a/e2e/tests/assorted/08-joinprotectedroom.spec.js
+++ b/e2e/tests/assorted/08-joinprotectedroom.spec.js
@@ -14,17 +14,12 @@ async function navigateToRoom() {
await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
}
-async function navigateToRoomActions() {
- await element(by.id('room-header')).tap();
- await waitFor(element(by.id('room-actions-view'))).toBeVisible().withTimeout(5000);
-}
-
async function openJoinCode() {
await element(by.id('room-view-join-button')).tap();
await waitFor(element(by.id('join-code'))).toBeVisible().withTimeout(5000);
}
-describe('Join public room', () => {
+describe('Join protected room', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
await navigateToLogin();
diff --git a/e2e/tests/assorted/10-deleteserver.spec.js b/e2e/tests/assorted/10-deleteserver.spec.js
index bf7379104..8e260fd70 100644
--- a/e2e/tests/assorted/10-deleteserver.spec.js
+++ b/e2e/tests/assorted/10-deleteserver.spec.js
@@ -22,8 +22,7 @@ describe('Delete server', () => {
await element(by.id('rooms-list-header-server-add')).tap();
await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(10000);
- await element(by.id('new-server-view-input')).replaceText(data.alternateServer);
- await element(by.id('new-server-view-button')).tap();
+ await element(by.id('new-server-view-input')).typeText(`${data.alternateServer}\n`);
await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(10000);
await element(by.id('workspace-view-register')).tap();
await waitFor(element(by.id('register-view'))).toBeVisible().withTimeout(2000);
@@ -32,7 +31,7 @@ describe('Delete server', () => {
await element(by.id('register-view-name')).replaceText(data.registeringUser3.username);
await element(by.id('register-view-username')).replaceText(data.registeringUser3.username);
await element(by.id('register-view-email')).replaceText(data.registeringUser3.email);
- await element(by.id('register-view-password')).replaceText(data.registeringUser3.password);
+ await element(by.id('register-view-password')).typeText(data.registeringUser3.password);
await element(by.id('register-view-submit')).tap();
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(60000);
diff --git a/e2e/tests/assorted/11-deeplinking.spec.js b/e2e/tests/assorted/11-deeplinking.spec.js
index cdde0323a..c40cff7bf 100644
--- a/e2e/tests/assorted/11-deeplinking.spec.js
+++ b/e2e/tests/assorted/11-deeplinking.spec.js
@@ -2,8 +2,8 @@ const {
device, element, by, waitFor
} = require('detox');
const data = require('../../data');
-const { tapBack, checkServer, navigateToRegister, login } = require('../../helpers/app');
-const { post, get } = require('../../helpers/data_setup');
+const { tapBack, checkServer, navigateToRegister } = require('../../helpers/app');
+const { post, get, login } = require('../../helpers/data_setup');
const DEEPLINK_METHODS = { AUTH: 'auth', ROOM: 'room' };
const getDeepLink = (method, server, params) => {
@@ -14,35 +14,31 @@ const getDeepLink = (method, server, params) => {
describe('Deep linking', () => {
let userId;
- let token;
+ let authToken;
before(async() => {
- const loginResult = await post('login', {
- user: data.users.regular.username,
- password: data.users.regular.password
- })
- userId = loginResult.data.data.userId
- token = loginResult.data.data.authToken
+ const loginResult = await login(data.users.regular.username, data.users.regular.password);
+ ({ userId, authToken } = loginResult);
});
describe('Authentication', () => {
it('should run a deep link to an invalid account and raise error', async() => {
await device.launchApp({
permissions: { notifications: 'YES' },
- newInstance: true,
+ delete: true,
url: getDeepLink(DEEPLINK_METHODS.AUTH, data.server, 'userId=123&token=abc'),
sourceApp: 'com.apple.mobilesafari'
});
- await waitFor(element(by.text('You\'ve been logged out by the server. Please log in again.'))).toExist().withTimeout(5000); // TODO: we need to improve this message
+ await waitFor(element(by.text('You\'ve been logged out by the server. Please log in again.'))).toExist().withTimeout(10000); // TODO: we need to improve this message
});
const authAndNavigate = async() => {
await device.launchApp({
permissions: { notifications: 'YES' },
newInstance: true,
- url: getDeepLink(DEEPLINK_METHODS.AUTH, data.server, `userId=${ userId }&token=${ token }&path=group/${ data.groups.private.name }`),
+ url: getDeepLink(DEEPLINK_METHODS.AUTH, data.server, `userId=${ userId }&token=${ authToken }&path=group/${ data.groups.private.name }`),
sourceApp: 'com.apple.mobilesafari'
});
- await waitFor(element(by.id(`room-view-title-${ data.groups.private.name }`))).toExist().withTimeout(10000);
+ await waitFor(element(by.id(`room-view-title-${ data.groups.private.name }`))).toExist().withTimeout(30000);
await tapBack();
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);
await checkServer(data.server);
@@ -56,10 +52,10 @@ describe('Deep linking', () => {
it('should authenticate while logged in another server', async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
await navigateToRegister(data.alternateServer);
- await element(by.id('register-view-name')).replaceText(data.registeringUser.username);
- await element(by.id('register-view-username')).replaceText(data.registeringUser.username);
- await element(by.id('register-view-email')).replaceText(data.registeringUser.email);
- await element(by.id('register-view-password')).replaceText(data.registeringUser.password);
+ await element(by.id('register-view-name')).replaceText(data.registeringUser4.username);
+ await element(by.id('register-view-username')).replaceText(data.registeringUser4.username);
+ await element(by.id('register-view-email')).replaceText(data.registeringUser4.email);
+ await element(by.id('register-view-password')).typeText(data.registeringUser4.password);
await element(by.id('register-view-submit')).tap();
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);
await authAndNavigate();
@@ -86,7 +82,7 @@ describe('Deep linking', () => {
url: getDeepLink(DEEPLINK_METHODS.ROOM, data.server, `rid=${ roomResult.data.group._id }`),
sourceApp: 'com.apple.mobilesafari'
});
- await waitFor(element(by.id(`room-view-title-${ data.groups.private.name }`))).toExist().withTimeout(10000);
+ await waitFor(element(by.id(`room-view-title-${ data.groups.private.name }`))).toExist().withTimeout(15000);
await tapBack();
});
});
diff --git a/e2e/tests/assorted/12-i18n.spec.js b/e2e/tests/assorted/12-i18n.spec.js
new file mode 100644
index 000000000..13e7c79be
--- /dev/null
+++ b/e2e/tests/assorted/12-i18n.spec.js
@@ -0,0 +1,114 @@
+const {
+ device, element, by, waitFor
+} = require('detox');
+const { navigateToLogin, login, sleep } = require('../../helpers/app');
+const { post } = require('../../helpers/data_setup');
+
+const data = require('../../data');
+const testuser = data.users.regular
+const defaultLaunchArgs = { permissions: { notifications: 'YES' } };
+
+const navToLanguage = async() => {
+ await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);
+ await element(by.id('rooms-list-view-sidebar')).tap();
+ await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000);
+ await waitFor(element(by.id('sidebar-settings'))).toBeVisible().withTimeout(2000);
+ await element(by.id('sidebar-settings')).tap();
+ await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000);
+ await element(by.id('settings-view-language')).tap();
+ await waitFor(element(by.id('language-view'))).toBeVisible().withTimeout(10000);
+};
+
+describe('i18n', () => {
+ describe('OS language', () => {
+ it('OS set to \'en\' and proper translate to \'en\'', async() => {
+ await device.launchApp({
+ ...defaultLaunchArgs,
+ languageAndLocale: {
+ language: "en",
+ locale: "en"
+ },
+ delete: true
+ });
+ await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000);
+ await expect(element(by.id('join-workspace').and(by.label('Join a workspace')))).toBeVisible();
+ await expect(element(by.id('create-workspace-button').and(by.label('Create a new workspace')))).toBeVisible();
+ });
+
+ it('OS set to unavailable language and fallback to \'en\'', async() => {
+ await device.launchApp({
+ ...defaultLaunchArgs,
+ languageAndLocale: {
+ language: "es-MX",
+ locale: "es-MX"
+ }
+ });
+ await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000);
+ await expect(element(by.id('join-workspace').and(by.label('Join a workspace')))).toBeVisible();
+ await expect(element(by.id('create-workspace-button').and(by.label('Create a new workspace')))).toBeVisible();
+ });
+
+ /**
+ * This test might become outdated as soon as we support the language
+ * Although this seems to be a bad approach, that's the intention for having fallback enabled
+ */
+ it('OS set to available language and fallback to \'en\' on strings missing translation', async() => {
+ await device.launchApp({
+ ...defaultLaunchArgs,
+ languageAndLocale: {
+ language: "nl",
+ locale: "nl"
+ }
+ });
+ await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000);
+ await expect(element(by.id('join-workspace').and(by.label('Join a workspace')))).toBeVisible(); // Missing nl translation
+ await expect(element(by.id('create-workspace-button').and(by.label('Een nieuwe workspace maken')))).toBeVisible();
+ });
+ });
+
+ describe('Rocket.Chat language', () => {
+ before(async() => {
+ await device.launchApp(defaultLaunchArgs);
+ await navigateToLogin();
+ await login(testuser.username, testuser.password);
+ });
+
+ it('should select \'en\'', async() => {
+ await navToLanguage();
+ await element(by.id('language-view-en')).tap();
+ await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);
+ await element(by.id('rooms-list-view-sidebar')).tap();
+ await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000);
+ await expect(element(by.id('sidebar-chats').withDescendant(by.label('Chats')))).toBeVisible();
+ await expect(element(by.id('sidebar-profile').withDescendant(by.label('Profile')))).toBeVisible();
+ await expect(element(by.id('sidebar-settings').withDescendant(by.label('Settings')))).toBeVisible();
+ await element(by.id('sidebar-close-drawer')).tap();
+ });
+
+ it('should select \'nl\' and fallback to \'en\'', async() => {
+ await navToLanguage();
+ await element(by.id('language-view-nl')).tap();
+ await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);
+ await element(by.id('rooms-list-view-sidebar')).tap();
+ await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000);
+ await expect(element(by.id('sidebar-chats').withDescendant(by.label('Chats')))).toBeVisible(); // fallback to en
+ await expect(element(by.id('sidebar-profile').withDescendant(by.label('Profiel')))).toBeVisible();
+ await expect(element(by.id('sidebar-settings').withDescendant(by.label('Instellingen')))).toBeVisible();
+ await element(by.id('sidebar-close-drawer')).tap();
+ });
+
+ it('should set unsupported language and fallback to \'en\'', async() => {
+ await post('users.setPreferences', { data: { language: 'eo' } }); // Set language to Esperanto
+ await device.launchApp(defaultLaunchArgs);
+ await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);
+ await element(by.id('rooms-list-view-sidebar')).tap();
+ await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000);
+ // give the app some time to apply new language
+ await sleep(3000);
+ await expect(element(by.id('sidebar-chats').withDescendant(by.label('Chats')))).toBeVisible();
+ await expect(element(by.id('sidebar-profile').withDescendant(by.label('Profile')))).toBeVisible();
+ await expect(element(by.id('sidebar-settings').withDescendant(by.label('Settings')))).toBeVisible();
+ await post('users.setPreferences', { data: { language: 'en' } }); // Set back to english
+ });
+ })
+});
\ No newline at end of file
diff --git a/e2e/tests/onboarding/01-onboarding.spec.js b/e2e/tests/onboarding/01-onboarding.spec.js
index 4806dcb57..e38a83764 100644
--- a/e2e/tests/onboarding/01-onboarding.spec.js
+++ b/e2e/tests/onboarding/01-onboarding.spec.js
@@ -34,8 +34,7 @@ describe('Onboarding', () => {
});
it('should enter an invalid server and get error', async() => {
- await element(by.id('new-server-view-input')).replaceText('invalidtest');
- await element(by.id('new-server-view-button')).tap();
+ await element(by.id('new-server-view-input')).typeText('invalidtest\n');
const errorText = 'Oops!';
await waitFor(element(by.text(errorText))).toBeVisible().withTimeout(60000);
await element(by.text('OK')).tap();
@@ -51,8 +50,7 @@ describe('Onboarding', () => {
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(2000);
await element(by.id('join-workspace')).tap();
await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000);
- await element(by.id('new-server-view-input')).replaceText(data.server);
- await element(by.id('new-server-view-button')).tap();
+ await element(by.id('new-server-view-input')).typeText(`${data.server}\n`);
await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(60000);
});
});
diff --git a/e2e/tests/onboarding/03-forgotpassword.spec.js b/e2e/tests/onboarding/03-forgotpassword.spec.js
index 88d4c3e90..8b7fe9b5a 100644
--- a/e2e/tests/onboarding/03-forgotpassword.spec.js
+++ b/e2e/tests/onboarding/03-forgotpassword.spec.js
@@ -30,6 +30,7 @@ describe('Forgot password screen', () => {
it('should reset password and navigate to login', async() => {
await element(by.id('forgot-password-view-email')).replaceText(data.users.existing.email);
await element(by.id('forgot-password-view-submit')).tap();
+ await waitFor(element(by.text('OK'))).toExist().withTimeout(10000);
await element(by.text('OK')).tap();
await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(60000);
});
diff --git a/e2e/tests/onboarding/07-server-history.spec.js b/e2e/tests/onboarding/07-server-history.spec.js
index d026965fb..fc1d6af9c 100644
--- a/e2e/tests/onboarding/07-server-history.spec.js
+++ b/e2e/tests/onboarding/07-server-history.spec.js
@@ -25,7 +25,7 @@ describe('Server history', () => {
it('should tap on a server history and navigate to login', async() => {
await element(by.id(`server-history-${ data.server }`)).tap();
- await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(2000);
+ await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(5000);
await expect(element(by.id('login-view-email'))).toHaveText(data.users.regular.username);
});
diff --git a/e2e/tests/room/01-createroom.spec.js b/e2e/tests/room/01-createroom.spec.js
index 07ecd8030..5e7ae2ca5 100644
--- a/e2e/tests/room/01-createroom.spec.js
+++ b/e2e/tests/room/01-createroom.spec.js
@@ -94,7 +94,7 @@ describe('Create room screen', () => {
describe('Usage', async() => {
it('should get invalid room', async() => {
- await element(by.id('create-channel-name')).replaceText('general');
+ await element(by.id('create-channel-name')).typeText('general');
await element(by.id('create-channel-submit')).tap();
await waitFor(element(by.text(`A channel with name 'general' exists`))).toExist().withTimeout(60000);
await expect(element(by.text(`A channel with name 'general' exists`))).toExist();
@@ -103,16 +103,17 @@ describe('Create room screen', () => {
it('should create public room', async() => {
const room = `public${ data.random }`;
- await element(by.id('create-channel-name')).replaceText(room);
+ await element(by.id('create-channel-name')).replaceText('');
+ await element(by.id('create-channel-name')).typeText(room);
await element(by.id('create-channel-type')).tap();
await element(by.id('create-channel-submit')).tap();
- await waitFor(element(by.id('room-view'))).toExist().withTimeout(60000);
+ await waitFor(element(by.id('room-view'))).toExist().withTimeout(6000);
await expect(element(by.id('room-view'))).toExist();
- await waitFor(element(by.id(`room-view-title-${ room }`))).toExist().withTimeout(60000);
+ await waitFor(element(by.id(`room-view-title-${ room }`))).toExist().withTimeout(6000);
await expect(element(by.id(`room-view-title-${ room }`))).toExist();
await tapBack();
await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(10000);
- await waitFor(element(by.id(`rooms-list-view-item-${ room }`))).toExist().withTimeout(60000);
+ await waitFor(element(by.id(`rooms-list-view-item-${ room }`))).toExist().withTimeout(6000);
await expect(element(by.id(`rooms-list-view-item-${ room }`))).toExist();
});
@@ -127,7 +128,7 @@ describe('Create room screen', () => {
await waitFor(element(by.id('selected-user-rocket.cat'))).toExist().withTimeout(5000);
await element(by.id('selected-users-view-submit')).tap();
await waitFor(element(by.id('create-channel-view'))).toExist().withTimeout(5000);
- await element(by.id('create-channel-name')).replaceText(room);
+ await element(by.id('create-channel-name')).typeText(room);
await element(by.id('create-channel-submit')).tap();
await waitFor(element(by.id('room-view'))).toExist().withTimeout(60000);
await expect(element(by.id('room-view'))).toExist();
@@ -149,7 +150,7 @@ describe('Create room screen', () => {
await waitFor(element(by.id('select-users-view'))).toExist().withTimeout(5000);
await element(by.id('selected-users-view-submit')).tap();
await waitFor(element(by.id('create-channel-view'))).toExist().withTimeout(10000);
- await element(by.id('create-channel-name')).replaceText(room);
+ await element(by.id('create-channel-name')).typeText(room);
await element(by.id('create-channel-submit')).tap();
await waitFor(element(by.id('room-view'))).toExist().withTimeout(60000);
await expect(element(by.id('room-view'))).toExist();
diff --git a/e2e/tests/room/02-room.spec.js b/e2e/tests/room/02-room.spec.js
index da83c1eb2..820536fb8 100644
--- a/e2e/tests/room/02-room.spec.js
+++ b/e2e/tests/room/02-room.spec.js
@@ -125,7 +125,6 @@ describe('Room screen', () => {
});
it('should not show user autocomplete on @ in the middle of a string', async() => {
- const username = data.users.regular.username
await element(by.id('messagebox-input')).tap();
await element(by.id('messagebox-input')).typeText(`email@gmail`);
await waitFor(element(by.id('messagebox-container'))).toNotExist().withTimeout(4000);
@@ -149,8 +148,8 @@ describe('Room screen', () => {
await element(by.id('messagebox-input')).clearText();
});
it('should draft message', async () => {
- await element(by.id('messagebox-input')).atIndex(0).tap();
- await element(by.id('messagebox-input')).atIndex(0).typeText(`${ data.random }draft`);
+ await element(by.id('messagebox-input')).tap();
+ await element(by.id('messagebox-input')).typeText(`${ data.random }draft`);
await tapBack();
await navigateToRoom(mainRoom);
@@ -191,9 +190,9 @@ describe('Room screen', () => {
await element(by.label(`${ data.random }message`)).atIndex(0).longPress();
await expect(element(by.id('action-sheet'))).toExist();
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
- await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);
- await waitFor(element(by.label('Unstar'))).toBeVisible().withTimeout(2000);
- await element(by.id('action-sheet-backdrop')).tap();
+ await element(by.id('action-sheet-handle')).swipe('up', 'slow', 0.5);
+ await waitFor(element(by.label('Unstar'))).toBeVisible().withTimeout(6000);
+ await element(by.id('action-sheet-handle')).swipe('down', 'fast', 0.8);
});
it('should react to message', async() => {
@@ -267,14 +266,14 @@ describe('Room screen', () => {
await mockMessage('pin')
await pinMessage('pin')
- await waitFor(element(by.label(`${ data.random }pin`)).atIndex(0)).toBeVisible().withTimeout(2000);
- await waitFor(element(by.label(`${ data.users.regular.username } Message pinned`)).atIndex(0)).toBeVisible().withTimeout(2000);
+ await waitFor(element(by.label(`${ data.random }pin`)).atIndex(0)).toExist().withTimeout(5000);
+ await waitFor(element(by.label(`${ data.users.regular.username } Message pinned`)).atIndex(0)).toExist().withTimeout(5000);
await element(by.label(`${ data.random }pin`)).atIndex(0).longPress();
await waitFor(element(by.id('action-sheet'))).toExist().withTimeout(1000);
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);
await waitFor(element(by.label('Unpin'))).toBeVisible().withTimeout(2000);
- await element(by.id('action-sheet-backdrop')).tap();
+ await element(by.id('action-sheet-handle')).swipe('down', 'fast', 0.8);
});
it('should delete message', async() => {
@@ -285,6 +284,7 @@ describe('Room screen', () => {
await expect(element(by.id('action-sheet'))).toExist();
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);
+ await waitFor(element(by.label('Delete'))).toExist().withTimeout(1000);
await element(by.label('Delete')).tap();
const deleteAlertMessage = 'You will not be able to recover this message!';
@@ -294,12 +294,5 @@ describe('Room screen', () => {
await waitFor(element(by.label(`${ data.random }delete`)).atIndex(0)).toNotExist().withTimeout(2000);
});
});
-
- // after(async() => {
- // await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
- // await tapBack();
- // await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(2000);
- // await expect(element(by.id('rooms-list-view'))).toExist();
- // });
});
});
diff --git a/e2e/tests/room/03-roomactions.spec.js b/e2e/tests/room/03-roomactions.spec.js
index c7945f651..fcfc86711 100644
--- a/e2e/tests/room/03-roomactions.spec.js
+++ b/e2e/tests/room/03-roomactions.spec.js
@@ -223,10 +223,10 @@ describe('Room actions screen', () => {
//Go to starred messages
await element(by.id('room-actions-starred')).tap();
await waitFor(element(by.id('starred-messages-view'))).toExist().withTimeout(2000);
- await waitFor(element(by.label(`${ data.random }messageToStar`).withAncestor(by.id('starred-messages-view')))).toBeVisible().withTimeout(60000);
+ await waitFor(element(by.label(`${ data.random }messageToStar`).withAncestor(by.id('starred-messages-view')))).toExist().withTimeout(60000);
//Unstar message
- await element(by.label(`${ data.random }messageToStar`).withAncestor(by.id('starred-messages-view'))).longPress();
+ await element(by.label(`${ data.random }messageToStar`)).atIndex(0).longPress();
await expect(element(by.id('action-sheet'))).toExist();
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
await element(by.label('Unstar')).tap();
@@ -247,18 +247,18 @@ describe('Room actions screen', () => {
//Back into Room Actions
await element(by.id('room-header')).tap();
await waitFor(element(by.id('room-actions-view'))).toExist().withTimeout(5000);
- await element(by.type('UIScrollView')).atIndex(1).scrollTo('bottom');
+ await element(by.id('room-actions-scrollview')).scrollTo('bottom');
await waitFor(element(by.id('room-actions-pinned'))).toExist();
await element(by.id('room-actions-pinned')).tap();
await waitFor(element(by.id('pinned-messages-view'))).toExist().withTimeout(2000);
- await waitFor(element(by.label(`${ data.random }messageToPin`).withAncestor(by.id('pinned-messages-view')))).toBeVisible().withTimeout(60000);
- await element(by.label(`${ data.random }messageToPin`).withAncestor(by.id('pinned-messages-view'))).longPress();
+ await waitFor(element(by.label(`${ data.random }messageToPin`).withAncestor(by.id('pinned-messages-view')))).toExist().withTimeout(6000);
+ await element(by.label(`${ data.random }messageToPin`).withAncestor(by.id('pinned-messages-view'))).atIndex(0).longPress();
await expect(element(by.id('action-sheet'))).toExist();
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
await element(by.label('Unpin')).tap();
- await waitFor(element(by.label(`${ data.random }messageToPin`).withAncestor(by.id('pinned-messages-view')))).toBeNotVisible().withTimeout(60000);
+ await waitFor(element(by.label(`${ data.random }messageToPin`).withAncestor(by.id('pinned-messages-view')))).not.toExist().withTimeout(6000);
await backToActions();
});
@@ -283,7 +283,7 @@ describe('Room actions screen', () => {
describe('Notification', async() => {
it('should navigate to notification preference view', async() => {
- await element(by.type('UIScrollView')).atIndex(1).scrollTo('bottom');
+ await element(by.id('room-actions-scrollview')).scrollTo('bottom');
await waitFor(element(by.id('room-actions-notifications'))).toExist().withTimeout(2000);
await element(by.id('room-actions-notifications')).tap();
await waitFor(element(by.id('notification-preference-view'))).toExist().withTimeout(2000);
@@ -311,7 +311,7 @@ describe('Room actions screen', () => {
it('should have notification sound option', async() => {
// Ugly hack to scroll on detox
- await element(by.type('UIScrollView')).atIndex(1).scrollTo('bottom');
+ await element(by.id('room-actions-scrollview')).scrollTo('bottom');
await waitFor(element(by.id('notification-preference-view-sound'))).toExist().withTimeout(4000);
});
@@ -335,7 +335,7 @@ describe('Room actions screen', () => {
const user = data.users.alternate
it('should tap on leave channel and raise alert', async() => {
- await element(by.type('UIScrollView')).atIndex(1).scrollTo('bottom');
+ await element(by.id('room-actions-scrollview')).scrollTo('bottom');
await waitFor(element(by.id('room-actions-leave-channel'))).toExist().withTimeout(2000);
await element(by.id('room-actions-leave-channel')).tap();
await waitFor(element(by.text('Yes, leave it!'))).toExist().withTimeout(2000);
@@ -368,7 +368,7 @@ describe('Room actions screen', () => {
await element(by.id('room-actions-members')).tap();
await element(by.id('room-members-view-toggle-status')).tap();
await waitFor(element(by.id(`room-members-view-item-${ user.username }`))).toExist().withTimeout(60000);
- await backToActions(1);
+ await backToActions();
});
describe('Room Members', async() => {
@@ -414,7 +414,7 @@ describe('Room actions screen', () => {
}
const closeActionSheet = async() => {
- await element(by.id('action-sheet-backdrop')).tap();
+ await element(by.id('action-sheet-handle')).swipe('down', 'fast', 0.6);
}
it('should set/remove as owner', async() => {
@@ -483,7 +483,7 @@ describe('Room actions screen', () => {
it('should ignore user', async() => {
const message = `${ data.random }ignoredmessagecontent`;
- const channelName = data.groups.private.name;
+ const channelName = `#${ data.groups.private.name }`;
await sendMessage(user, channelName, message);
await openActionSheet(user.username);
await element(by.label('Ignore')).tap();
diff --git a/e2e/tests/room/05-threads.spec.js b/e2e/tests/room/05-threads.spec.js
index e7dec4c70..40652df7d 100644
--- a/e2e/tests/room/05-threads.spec.js
+++ b/e2e/tests/room/05-threads.spec.js
@@ -81,7 +81,7 @@ describe('Threads', () => {
it('should navigate to thread from button', async() => {
await element(by.id(`message-thread-button-${ thread }`)).tap();
- await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
+ await waitFor(element(by.id('room-view'))).toExist().withTimeout(5000);
await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000);
await expect(element(by.id(`room-view-title-${ thread }`))).toExist();
await tapBack();
@@ -89,7 +89,7 @@ describe('Threads', () => {
it('should toggle follow thread', async() => {
await element(by.id(`message-thread-button-${ thread }`)).tap();
- await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
+ await waitFor(element(by.id('room-view'))).toExist().withTimeout(5000);
await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000);
await expect(element(by.id(`room-view-title-${ thread }`))).toExist();
await element(by.id('room-view-header-unfollow')).tap();
@@ -102,7 +102,7 @@ describe('Threads', () => {
it('should send message in thread only', async() => {
const messageText = 'threadonly';
- await mockMessage(messageText);
+ await mockMessage(messageText, true);
await tapBack();
await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000);
await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000);
@@ -113,7 +113,7 @@ describe('Threads', () => {
it('should mark send to channel and show on main channel', async() => {
const messageText = 'sendToChannel';
await element(by.id(`message-thread-button-${ thread }`)).tap();
- await element(by.id('messagebox-input')).atIndex(0).typeText(messageText);
+ await element(by.id('messagebox-input-thread')).typeText(messageText);
await element(by.id('messagebox-send-to-channel')).tap();
await element(by.id('messagebox-send-message')).tap();
await tapBack();
@@ -128,16 +128,14 @@ describe('Threads', () => {
await mockMessage('dummymessagebetweenthethread');
await dismissReviewNag() //TODO: Create a proper test for this elsewhere.
await element(by.id(`message-thread-button-${ thread }`)).tap();
- await element(by.id('messagebox-input')).atIndex(0).typeText(messageText);
+ await element(by.id('messagebox-input-thread')).typeText(messageText);
await element(by.id('messagebox-send-to-channel')).tap();
await element(by.id('messagebox-send-message')).tap();
await tapBack();
await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000);
await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000);
- await sleep(500) //TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :(
-
+ await waitFor(element(by.id(`message-thread-replied-on-${ thread }`))).toBeVisible().withTimeout(2000);
await element(by.id(`message-thread-replied-on-${ thread }`)).tap();
- await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000);
await expect(element(by.id(`room-view-title-${ thread }`))).toExist();
await tapBack();
@@ -149,7 +147,6 @@ describe('Threads', () => {
await waitFor(element(by.id('thread-messages-view'))).toExist().withTimeout(5000);
await expect(element(by.id('thread-messages-view'))).toExist();
await element(by.id(`thread-messages-view-${ thread }`)).atIndex(0).tap();
- await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000);
await expect(element(by.id(`room-view-title-${ thread }`))).toExist();
await tapBack();
@@ -160,31 +157,20 @@ describe('Threads', () => {
it('should draft thread message', async () => {
await element(by.id(`message-thread-button-${ thread }`)).tap();
- await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000);
- await element(by.id('messagebox-input')).atIndex(0).tap();
- await element(by.id('messagebox-input')).atIndex(0).typeText(`${ thread }draft`);
+ await element(by.id('messagebox-input-thread')).typeText(`${ thread }draft`);
await tapBack();
await element(by.id(`message-thread-button-${ thread }`)).tap();
- await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000);
- await expect(element(by.id('messagebox-input')).atIndex(0)).toHaveText(`${ thread }draft`);
- await element(by.id('messagebox-input')).atIndex(0).clearText();
+ await expect(element(by.id('messagebox-input-thread'))).toHaveText(`${ thread }draft`);
+ await element(by.id('messagebox-input-thread')).clearText();
await tapBack();
await element(by.id(`message-thread-button-${ thread }`)).tap();
- await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000);
- await expect(element(by.id('messagebox-input')).atIndex(0)).toHaveText('');
+ await expect(element(by.id('messagebox-input-thread'))).toHaveText('');
});
});
-
- // after(async() => {
- // await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
- // await tapBack();
- // await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(2000);
- // await expect(element(by.id('rooms-list-view'))).toExist();
- // });
});
});
diff --git a/e2e/tests/room/07-markasunread.spec.js b/e2e/tests/room/07-markasunread.spec.js
index 9f425e8c4..dcbc50367 100644
--- a/e2e/tests/room/07-markasunread.spec.js
+++ b/e2e/tests/room/07-markasunread.spec.js
@@ -2,7 +2,8 @@ const {
device, expect, element, by, waitFor
} = require('detox');
const data = require('../../data');
-const { navigateToLogin, login, mockMessage, tapBack, searchRoom, logout } = require('../../helpers/app');
+const { navigateToLogin, login, searchRoom } = require('../../helpers/app');
+const { sendMessage } = require('../../helpers/data_setup')
async function navigateToRoom(user) {
await searchRoom(`${ user }`);
@@ -20,23 +21,21 @@ describe('Mark as unread', () => {
await navigateToRoom(user);
});
+ // TODO: Fix flakiness. If it fails, run it solo.
describe('Usage', async() => {
describe('Mark message as unread', async() => {
it('should mark message as unread', async() => {
- await mockMessage('message')
- await expect(element(by.label(`${ data.random }message`)).atIndex(0)).toExist();
- await tapBack();
- await logout();
- await navigateToLogin();
- await login(data.users.alternate.username, data.users.alternate.password);
- await navigateToRoom(data.users.regular.username);
- await element(by.label(`${ data.random }message`)).atIndex(0).longPress();
+ const message = `${ data.random }message`;
+ const channelName = `@${ data.users.regular.username }`;
+ await sendMessage(data.users.alternate, channelName, message);
+ await waitFor(element(by.label(message)).atIndex(0)).toExist().withTimeout(30000);
+ await element(by.label(message)).atIndex(0).longPress();
await expect(element(by.id('action-sheet'))).toExist();
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);
await element(by.label('Mark Unread')).tap();
await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(5000);
- await expect(element(by.id(`rooms-list-view-item-${data.users.regular.username}`))).toExist();
+ await expect(element(by.id(`rooms-list-view-item-${data.users.alternate.username}`))).toExist();
});
});
});
diff --git a/e2e/tests/room/08-roominfo.spec.js b/e2e/tests/room/08-roominfo.spec.js
index 3cd339bac..fd6216cf9 100644
--- a/e2e/tests/room/08-roominfo.spec.js
+++ b/e2e/tests/room/08-roominfo.spec.js
@@ -119,7 +119,7 @@ describe('Room info screen', () => {
it('should have type switch', async() => {
// Ugly hack to scroll on detox
- await element(by.type('UIScrollView')).atIndex(1).swipe('up');
+ await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.8);
await expect(element(by.id('room-info-edit-view-t'))).toExist();
});
@@ -145,7 +145,7 @@ describe('Room info screen', () => {
after(async() => {
// Ugly hack to scroll on detox
- await element(by.type('UIScrollView')).atIndex(1).swipe('down');
+ await element(by.id('room-info-edit-view-list')).swipe('down', 'fast', 0.8);
});
});
@@ -164,7 +164,7 @@ describe('Room info screen', () => {
it('should change room name', async() => {
await element(by.id('room-info-edit-view-name')).replaceText(`${ privateRoomName }new`);
- await element(by.type('UIScrollView')).atIndex(1).swipe('up');
+ await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
await element(by.id('room-info-edit-view-submit')).tap();
await waitForToast();
await tapBack();
@@ -174,10 +174,10 @@ describe('Room info screen', () => {
await element(by.id('room-info-view-edit-button')).tap();
await waitFor(element(by.id('room-info-edit-view'))).toExist().withTimeout(2000);
await element(by.id('room-info-edit-view-name')).replaceText(`${ privateRoomName }`);
- await element(by.type('UIScrollView')).atIndex(1).swipe('up');
+ await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
await element(by.id('room-info-edit-view-submit')).tap();
await waitForToast();
- await element(by.type('UIScrollView')).atIndex(1).swipe('down');
+ await element(by.id('room-info-edit-view-list')).swipe('down', 'fast', 0.8);
});
it('should reset form', async() => {
@@ -186,7 +186,7 @@ describe('Room info screen', () => {
await element(by.id('room-info-edit-view-topic')).replaceText('abc');
await element(by.id('room-info-edit-view-announcement')).replaceText('abc');
await element(by.id('room-info-edit-view-password')).replaceText('abc');
- await element(by.type('UIScrollView')).atIndex(1).swipe('up');
+ await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
await element(by.id('room-info-edit-view-t')).tap();
await element(by.id('room-info-edit-view-ro')).longPress(); //https://github.com/facebook/react-native/issues/28032
await element(by.id('room-info-edit-view-react-when-ro')).tap();
@@ -200,12 +200,12 @@ describe('Room info screen', () => {
await expect(element(by.id('room-info-edit-view-t'))).toHaveValue('1');
await expect(element(by.id('room-info-edit-view-ro'))).toHaveValue('0');
await expect(element(by.id('room-info-edit-view-react-when-ro'))).toBeNotVisible();
- await element(by.type('UIScrollView')).atIndex(1).swipe('down');
+ await element(by.id('room-info-edit-view-list')).swipe('down', 'fast', 0.8);
});
it('should change room description', async() => {
await element(by.id('room-info-edit-view-description')).replaceText('new description');
- await element(by.type('UIScrollView')).atIndex(1).swipe('up');
+ await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
await element(by.id('room-info-edit-view-submit')).tap();
await waitForToast();
await tapBack();
@@ -218,7 +218,7 @@ describe('Room info screen', () => {
await element(by.id('room-info-view-edit-button')).tap();
await waitFor(element(by.id('room-info-edit-view'))).toExist().withTimeout(2000);
await element(by.id('room-info-edit-view-topic')).replaceText('new topic');
- await element(by.type('UIScrollView')).atIndex(1).swipe('up');
+ await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
await element(by.id('room-info-edit-view-submit')).tap();
await waitForToast();
await tapBack();
@@ -231,7 +231,7 @@ describe('Room info screen', () => {
await element(by.id('room-info-view-edit-button')).tap();
await waitFor(element(by.id('room-info-edit-view'))).toExist().withTimeout(2000);
await element(by.id('room-info-edit-view-announcement')).replaceText('new announcement');
- await element(by.type('UIScrollView')).atIndex(1).swipe('up');
+ await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
await element(by.id('room-info-edit-view-submit')).tap();
await waitForToast();
await tapBack();
@@ -243,14 +243,14 @@ describe('Room info screen', () => {
await waitFor(element(by.id('room-info-view-edit-button'))).toExist().withTimeout(10000);
await element(by.id('room-info-view-edit-button')).tap();
await waitFor(element(by.id('room-info-edit-view'))).toExist().withTimeout(2000);
- await element(by.type('UIScrollView')).atIndex(1).swipe('up');
+ await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
await element(by.id('room-info-edit-view-password')).replaceText('password');
await element(by.id('room-info-edit-view-submit')).tap();
await waitForToast();
});
it('should change room type', async() => {
- await element(by.type('UIScrollView')).atIndex(1).swipe('up');
+ await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
await element(by.id('room-info-edit-view-t')).tap();
await element(by.id('room-info-edit-view-submit')).tap();
await waitForToast();
@@ -272,7 +272,7 @@ describe('Room info screen', () => {
// });
it('should archive room', async() => {
- await element(by.type('UIScrollView')).atIndex(1).swipe('up');
+ await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
await element(by.id('room-info-edit-view-archive')).tap();
await waitFor(element(by.text('Yes, archive it!'))).toExist().withTimeout(5000);
await element(by.text('Yes, archive it!')).tap();
@@ -288,7 +288,7 @@ describe('Room info screen', () => {
});
it('should delete room', async() => {
- await element(by.type('UIScrollView')).atIndex(1).swipe('up');
+ await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
await element(by.id('room-info-edit-view-delete')).tap();
await waitFor(element(by.text('Yes, delete it!'))).toExist().withTimeout(5000);
await element(by.text('Yes, delete it!')).tap();
diff --git a/ios/RocketChatRN.xcodeproj/project.pbxproj b/ios/RocketChatRN.xcodeproj/project.pbxproj
index 20ab4236d..6a123023f 100644
--- a/ios/RocketChatRN.xcodeproj/project.pbxproj
+++ b/ios/RocketChatRN.xcodeproj/project.pbxproj
@@ -1452,6 +1452,7 @@
DEAD_CODE_STRIPPING = NO;
DEVELOPMENT_TEAM = S6UPZG7ZR3;
ENABLE_BITCODE = NO;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)",
@@ -1567,6 +1568,7 @@
DEVELOPMENT_TEAM = S6UPZG7ZR3;
ENABLE_BITCODE = NO;
ENABLE_TESTABILITY = YES;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"${PODS_ROOT}/Crashlytics/iOS\"",
@@ -1683,11 +1685,12 @@
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = S6UPZG7ZR3;
ENABLE_BITCODE = NO;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = NotificationService/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 4.16.1;
+ MARKETING_VERSION = 4.16.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService;
@@ -1724,7 +1727,7 @@
INFOPLIST_FILE = NotificationService/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 4.16.1;
+ MARKETING_VERSION = 4.16.2;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -1752,6 +1755,7 @@
DEAD_CODE_STRIPPING = NO;
DEVELOPMENT_TEAM = S6UPZG7ZR3;
ENABLE_BITCODE = NO;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)",
diff --git a/ios/RocketChatRN/Info.plist b/ios/RocketChatRN/Info.plist
index dd599d645..e6129268e 100644
--- a/ios/RocketChatRN/Info.plist
+++ b/ios/RocketChatRN/Info.plist
@@ -23,7 +23,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 4.16.1
+ 4.16.2
CFBundleSignature
????
CFBundleURLTypes
diff --git a/ios/ShareRocketChatRN/Info.plist b/ios/ShareRocketChatRN/Info.plist
index 2f523baaa..38a2e4cf6 100644
--- a/ios/ShareRocketChatRN/Info.plist
+++ b/ios/ShareRocketChatRN/Info.plist
@@ -21,7 +21,7 @@
CFBundlePackageType
XPC!
CFBundleShortVersionString
- 4.16.1
+ 4.16.2
CFBundleVersion
1
KeychainGroup
diff --git a/package.json b/package.json
index d9d0dc051..0384fdc92 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rocket-chat-reactnative",
- "version": "4.16.1",
+ "version": "4.16.2",
"private": true,
"scripts": {
"start": "react-native start",
@@ -67,6 +67,7 @@
"js-base64": "2.5.2",
"js-sha256": "^0.9.0",
"lodash": "4.17.20",
+ "mocha": "7.1.2",
"moment": "2.27.0",
"pretty-bytes": "^5.3.0",
"prop-types": "15.7.2",
@@ -144,7 +145,7 @@
"babel-runtime": "^6.26.0",
"bugsnag-sourcemaps": "1.3.0",
"codecov": "3.7.1",
- "detox": "^16.9.0",
+ "detox": "^18.10.0",
"emotion-theming": "10.0.27",
"eslint": "6.8.0",
"eslint-plugin-import": "2.22.0",
@@ -156,7 +157,6 @@
"jest": "^25.1.0",
"jest-cli": "^23.6.0",
"metro-react-native-babel-preset": "^0.59.0",
- "mocha": "7.1.2",
"otp.js": "1.2.0",
"patch-package": "6.2.2",
"react-dom": "16.13.1",
diff --git a/storybook/stories/Avatar.js b/storybook/stories/Avatar.js
index fb642728b..9943f832e 100644
--- a/storybook/stories/Avatar.js
+++ b/storybook/stories/Avatar.js
@@ -1,11 +1,10 @@
+/* eslint-disable import/no-extraneous-dependencies */
import React from 'react';
-import { ScrollView, StyleSheet, View } from 'react-native';
-import PropTypes from 'prop-types';
+import { StyleSheet } from 'react-native';
+import { storiesOf } from '@storybook/react-native';
-import { themes } from '../../app/constants/colors';
import Avatar from '../../app/containers/Avatar/Avatar';
import Status from '../../app/containers/Status/Status';
-import StoriesSeparator from './StoriesSeparator';
import sharedStyles from '../../app/views/Styles';
const styles = StyleSheet.create({
@@ -16,125 +15,152 @@ const styles = StyleSheet.create({
const server = 'https://open.rocket.chat';
-const Separator = ({ title, theme }) => ;
-Separator.propTypes = {
- title: PropTypes.string,
- theme: PropTypes.string
-};
+const _theme = 'light';
-const AvatarStories = ({ theme }) => (
-
-
- (
+
+));
+
+stories.add('Avatar by roomId', () => (
+
+));
+
+stories.add('Avatar by url', () => (
+
+));
+
+stories.add('Avatar by path', () => (
+
+));
+
+stories.add('With ETag', () => (
+
+));
+
+stories.add('Without ETag', () => (
+
+));
+
+stories.add('Emoji', () => (
+ ({ name: 'troll', extension: 'jpg' })}
+ server={server}
+ size={56}
+ />
+));
+
+stories.add('Direct', () => (
+
+));
+
+stories.add('Channel', () => (
+
+));
+
+stories.add('Touchable', () => (
+ console.log('Pressed!')}
+ size={56}
+ />
+));
+
+stories.add('Static', () => (
+
+));
+
+stories.add('Avatar by roomId', () => (
+
+));
+
+stories.add('Custom borderRadius', () => (
+
+));
+
+stories.add('Children', () => (
+
+
-
-
-
-
-
-
-
-
-
-
-
- ({ name: 'troll', extension: 'jpg' })}
- server={server}
- size={56}
- />
-
-
-
-
-
- console.log('Pressed!')}
- size={56}
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
-AvatarStories.propTypes = {
- theme: PropTypes.string
-};
-export default AvatarStories;
+
+));
+
+stories.add('Wrong server', () => (
+
+));
+
+stories.add('Custom style', () => (
+
+));
diff --git a/storybook/stories/Markdown.js b/storybook/stories/Markdown.js
index 92c969501..bffd5a2aa 100644
--- a/storybook/stories/Markdown.js
+++ b/storybook/stories/Markdown.js
@@ -1,14 +1,19 @@
-/* eslint-disable react/prop-types */
+/* eslint-disable import/no-extraneous-dependencies */
import React from 'react';
import { ScrollView, StyleSheet, View } from 'react-native';
+import { storiesOf } from '@storybook/react-native';
import Markdown from '../../app/containers/markdown';
-import StoriesSeparator from './StoriesSeparator';
import { themes } from '../../app/constants/colors';
+
+const theme = 'light';
+
const styles = StyleSheet.create({
container: {
- marginHorizontal: 15
+ marginHorizontal: 15,
+ backgroundColor: themes[theme].backgroundColor,
+ marginVertical: 50
},
separator: {
marginHorizontal: 10,
@@ -37,258 +42,231 @@ const getCustomEmoji = (content) => {
return customEmoji;
};
-// eslint-disable-next-line arrow-body-style
-export default ({ theme }) => {
- return (
-
-
-
-
-
+const stories = storiesOf('Markdown', module);
-
-
-
-
+stories.add('Text', () => (
+
+
+
+
+
+
+
+));
-
-
-
-
+stories.add('Edited', () => (
+
+
+
+));
-
-
-
-
+stories.add('Preview', () => (
+
+
+
+
+
+
+
+));
-
-
-
-
+stories.add('Mentions', () => (
+
+
+
+
+));
-
-
-
-
-
-
-
-
+stories.add('Hashtag', () => (
+
+
+
+));
-
-
-
-
+stories.add('Emoji', () => (
+
+
+
+
+
+
+));
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This is block quote
+stories.add('Block quote', () => (
+
+ This is block quote
this is a normal line`}
- theme={theme}
- />
-
+ theme={theme}
+ />
+
+));
-
-
-
-
-
+stories.add('Links', () => (
+
+
+
+
+));
-
-
-
-
-
-
-
-
-
-
-
-
-
+stories.add('Image', () => (
+
+
+
+));
-
-
-
-
+stories.add('Headers', () => (
+
+
+
+
+
+
+
+
+));
-
-
- (
+
+
+
-
+ theme={theme}
+ />
+
+));
-
-
-
-
+stories.add('Lists', () => (
+
+
+
+
+));
-
-
-
-
-
-
-
-
-
-
-
-
- (
+
+
-
-
- );
-};
+ theme={theme}
+ />
+
+));
diff --git a/storybook/stories/Message.js b/storybook/stories/Message.js
index 7be131dbc..82cfa1b03 100644
--- a/storybook/stories/Message.js
+++ b/storybook/stories/Message.js
@@ -1,21 +1,21 @@
+/* eslint-disable import/no-extraneous-dependencies */
import React from 'react';
-import { ScrollView, StyleSheet } from 'react-native';
+import { StyleSheet, ScrollView } from 'react-native';
+import { Provider } from 'react-redux';
+import { storiesOf } from '@storybook/react-native';
// import moment from 'moment';
import MessageComponent from '../../app/containers/message/Message';
-import StoriesSeparator from './StoriesSeparator';
import messagesStatus from '../../app/constants/messagesStatus';
import MessageSeparator from '../../app/views/RoomView/Separator';
+import MessageContext from '../../app/containers/message/Context';
import { themes } from '../../app/constants/colors';
+import { store } from './index';
-let _theme = 'light';
+const _theme = 'light';
const styles = StyleSheet.create({
- separator: {
- marginTop: 30,
- marginBottom: 0
- }
});
const user = {
@@ -40,6 +40,26 @@ const getCustomEmoji = (content) => {
return customEmoji;
};
+const messageDecorator = story => (
+ {},
+ onLongPress: () => {},
+ reactionInit: () => {},
+ onErrorPress: () => {},
+ replyBroadcast: () => {},
+ onReactionPress: () => {},
+ onDiscussionPress: () => {},
+ onReactionLongPress: () => {},
+ threadBadgeColor: themes.light.tunreadColor
+ }}
+ >
+ {story()}
+
+);
+
const Message = props => (
(
/>
);
-// eslint-disable-next-line react/prop-types
-const Separator = ({ title, theme }) => ;
-// eslint-disable-next-line react/prop-types
-export default ({ theme }) => {
- _theme = theme;
- return (
-
-
-
+const stories = storiesOf('Message', module)
+ .addDecorator(story => {story()})
+ .addDecorator(story => {story()})
+ .addDecorator(messageDecorator);
-
-
+stories.add('Basic', () => (
+ <>
+
+
+ >
+));
-
-
-
-
-
-
+stories.add('Grouped messages', () => (
+ <>
+
+
+
+
+
+ >
+));
-
-
+stories.add('Without header', () => (
+
+));
-
-
-
+stories.add('With alias', () => (
+ <>
+
+
+ >
+));
-
-
+stories.add('Edited', () => (
+
+));
-
-
-
- (
+ <>
+
+
+ {}}
+ type='e2e'
+ />
+
+
+
+ alert('Error pressed')}
+ type='e2e'
+ />
+
+
+ >
+));
+
+stories.add('Block Quote', () => (
+ <>
+
+ Testing block quote\nTesting block quote'} />
+ >
+));
+
+stories.add('Lists', () => (
+ <>
+
+
+
+
+ >
+));
+
+stories.add('Static avatar', () => (
+
+));
+
+stories.add('Full name', () => (
+
+));
+
+stories.add('Mentions', () => (
+ <>
+
+
+ >
+));
+
+stories.add('Emojis', () => (
+ <>
+
+
+
+
+
+
+ >
+));
+
+stories.add('Time format', () => (
+
+));
+
+stories.add('Reactions', () => (
+ <>
+ {}}
+ />
+ {}}
+ />
+ >
+));
+
+stories.add('Date and Unread separators', () => (
+ <>
+
+
+
+
+
+
+
+
+ >
+));
+
+stories.add('With image', () => (
+ <>
+
+
+ >
+));
+
+stories.add('With video', () => (
+ <>
+
+
+ >
+));
+
+stories.add('With audio', () => (
+ <>
+
+
+
+
+
+ >
+));
+
+stories.add('With file', () => (
+ <>
+
+
+ >
+));
+
+stories.add('Message with reply', () => (
+ <>
+
+
+ >
+));
+
+stories.add('Message with read receipt', () => (
+ <>
+
+
+
+
+ >
+));
+
+stories.add('Message with thread', () => (
+ <>
+
+
+
+
+
+
+
+ >
+));
+
+stories.add('Sequential thread messages following thread button', () => (
+ <>
+
+
+
+
+ >
+));
+
+stories.add('Sequential thread messages following thread reply', () => (
+ <>
+
+
+
+
+ >
+));
+
+stories.add('Discussion', () => (
+ <>
+
+
+
+
+ >
+));
+
+stories.add('URL', () => (
+ <>
+
+
+
+ >
+));
+
+stories.add('Custom fields', () => (
+ <>
+ {}}
- type='e2e'
- />
-
-
-
- alert('Error pressed')}
- type='e2e'
- />
-
-
-
-
-
- Testing block quote\nTesting block quote'} />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ title: 'Field 5',
+ value: 'Value 5'
+ }]
+ }]}
+ />
+ >
+));
-
-
+stories.add('Two short custom fields with markdown', () => (
+
+));
-
-
+stories.add('Colored attachments', () => (
+
+));
-
-
+stories.add('Broadcast', () => (
+ alert('broadcast!')} />
+));
-
-
+stories.add('Archived', () => (
+
+));
-
-
+stories.add('Error', () => (
+ <>
+ alert('Error pressed')} />
+ alert('Error pressed')} isHeader={false} />
+ >
+));
-
-
+stories.add('Temp', () => (
+
+));
-
-
+stories.add('Editing', () => (
+
+));
-
- {}}
- />
+stories.add('System messages', () => (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+));
-
- {}}
- />
+stories.add('Ignored', () => (
+
+));
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/*
-
-
- */}
-
-
-
-
-
-
- {/*
-
-
- */}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- alert('broadcast!')} />
-
-
-
-
-
- alert('Error pressed')} />
- alert('Error pressed')} isHeader={false} />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
+stories.add('Custom style', () => (
+
+));
diff --git a/storybook/stories/RoomItem.js b/storybook/stories/RoomItem.js
index 819a149b2..d39e92082 100644
--- a/storybook/stories/RoomItem.js
+++ b/storybook/stories/RoomItem.js
@@ -1,15 +1,18 @@
+/* eslint-disable import/no-extraneous-dependencies */
import React from 'react';
import { ScrollView, Dimensions } from 'react-native';
+import { storiesOf } from '@storybook/react-native';
+import { Provider } from 'react-redux';
// import moment from 'moment';
import { themes } from '../../app/constants/colors';
import RoomItemComponent from '../../app/presentation/RoomItem/RoomItem';
import { longText } from '../utils';
-import StoriesSeparator from './StoriesSeparator';
+import { store } from './index';
const baseUrl = 'https://open.rocket.chat';
const { width } = Dimensions.get('window');
-let _theme = 'light';
+const _theme = 'light';
const lastMessage = {
u: {
username: 'diego.mello'
@@ -22,7 +25,6 @@ const updatedAt = {
const RoomItem = props => (
(
/>
);
-// eslint-disable-next-line react/prop-types
-const Separator = ({ title }) => ;
+const stories = storiesOf('Room Item', module)
+ .addDecorator(story => {story()})
+ .addDecorator(story => {story()});
-// eslint-disable-next-line react/prop-types
-export default ({ theme }) => {
- _theme = theme;
- return (
-
-
-
-
-
-
+stories.add('Basic', () => (
+
+));
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+stories.add('User', () => (
+ <>
+
+
+ >
+));
-
-
-
-
-
-
-
-
-
-
-
-
+stories.add('Type', () => (
+ <>
+
+
+
+
+
+
+
+ >
+));
-
-
-
-
-
-
-
-
-
- );
-};
+stories.add('User status', () => (
+ <>
+
+
+
+
+
+
+ >
+));
+
+stories.add('Alerts', () => (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+ >
+));
+
+stories.add('Last Message', () => (
+ <>
+
+
+
+
+
+
+
+ >
+));
diff --git a/storybook/stories/StoriesSeparator.js b/storybook/stories/StoriesSeparator.js
deleted file mode 100644
index a24fa1d04..000000000
--- a/storybook/stories/StoriesSeparator.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import React from 'react';
-import { Text, StyleSheet } from 'react-native';
-import PropTypes from 'prop-types';
-
-import { themes } from '../../app/constants/colors';
-
-const styles = StyleSheet.create({
- separator: {
- marginVertical: 30,
- marginLeft: 10,
- fontSize: 20,
- fontWeight: '300'
- }
-});
-
-const Separator = ({ title, style, theme }) => (
-
- {title}
-
-);
-
-Separator.propTypes = {
- title: PropTypes.string.isRequired,
- theme: PropTypes.string,
- style: PropTypes.object
-};
-
-export default Separator;
diff --git a/storybook/stories/UiKitMessage.js b/storybook/stories/UiKitMessage.js
index 68d81adc6..4fa2865f8 100644
--- a/storybook/stories/UiKitMessage.js
+++ b/storybook/stories/UiKitMessage.js
@@ -1,11 +1,11 @@
+/* eslint-disable import/no-extraneous-dependencies */
import React from 'react';
import { ScrollView, StyleSheet, SafeAreaView } from 'react-native';
+import { storiesOf } from '@storybook/react-native';
+import MessageContext from '../../app/containers/message/Context';
import { UiKitMessage } from '../../app/containers/UIKit';
-import StoriesSeparator from './StoriesSeparator';
-
-// eslint-disable-next-line react/prop-types
-const Separator = ({ title }) => ;
+import { themes } from '../../app/constants/colors';
const styles = StyleSheet.create({
container: {
@@ -17,426 +17,435 @@ const styles = StyleSheet.create({
}
});
-export default () => (
-
-
-
- {
- UiKitMessage([{
- type: 'section',
+const user = {
+ id: 'y8bd77ptZswPj3EW8',
+ username: 'diego.mello',
+ token: '79q6lH40W4ZRGLOshDiDiVlQaCc4f_lU9HNdHLAzuHz'
+};
+
+const baseUrl = 'https://open.rocket.chat';
+
+const messageDecorator = story => (
+ {},
+ onLongPress: () => {},
+ reactionInit: () => {},
+ onErrorPress: () => {},
+ replyBroadcast: () => {},
+ onReactionPress: () => {},
+ onDiscussionPress: () => {},
+ onReactionLongPress: () => {},
+ threadBadgeColor: themes.light.tunreadColor
+ }}
+ >
+ {story()}
+
+);
+
+const stories = storiesOf('UiKitMessage', module)
+ .addDecorator(story => {story()})
+ .addDecorator(story => {story()})
+ .addDecorator(messageDecorator);
+
+const Section = () => UiKitMessage([{
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'Section'
+ }
+}]);
+stories.add('Section', () => );
+
+const SectionMarkdownList = () => UiKitMessage([{
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: '*List*:\n1. Item'
+ }
+}]);
+stories.add('Section + Markdown List', () => );
+
+const SectionOverflow = () => UiKitMessage([
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'Section + Overflow'
+ },
+ accessory: {
+ type: 'overflow',
+ options: [
+ {
text: {
- type: 'mrkdwn',
- text: 'Section'
- }
- }])
- }
-
-
- {
- UiKitMessage([{
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: '*List*:\n1. Item'
- }
- }])
- }
-
-
- {
- UiKitMessage([
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: 'Section + Overflow'
- },
- accessory: {
- type: 'overflow',
- options: [
- {
- text: {
- type: 'plain_text',
- text: 'Option 1',
- emoji: true
- },
- value: 'value-0'
- },
- {
- text: {
- type: 'plain_text',
- text: 'Option 2',
- emoji: true
- },
- value: 'value-1'
- },
- {
- text: {
- type: 'plain_text',
- text: 'Option 3',
- emoji: true
- },
- value: 'value-2'
- },
- {
- text: {
- type: 'plain_text',
- text: 'Option 4',
- emoji: true
- },
- value: 'value-3'
- }
- ]
- }
- }
- ])
- }
-
-
- {
- UiKitMessage([{
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: 'Section + Image'
- },
- accessory: {
- type: 'image',
- imageUrl: 'https://raw.githubusercontent.com/RocketChat/Rocket.Chat.Artwork/master/Logos/icon-circle-256.png',
- altText: 'plants'
- }
- }])
- }
-
-
- {
- UiKitMessage([{
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: 'Section + button'
- },
- accessory: {
- type: 'button',
- text: {
- type: 'plain_text',
- text: 'button'
- }
- }
- }])
- }
-
-
- {
- UiKitMessage([{
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: 'Section + select'
- },
- accessory: {
- type: 'static_select',
- options: [
- {
- value: 1,
- text: {
- type: 'plain_text',
- text: 'button'
- }
- }, {
- value: 2,
- text: {
- type: 'plain_text',
- text: 'second button'
- }
- }]
- }
- }])
- }
-
-
- {
- UiKitMessage([{
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: 'Section + DatePicker'
- },
- accessory: {
- type: 'datepicker',
- initial_date: '1990-04-28',
- placeholder: {
- type: 'plain_text',
- text: 'Select a date',
- emoji: true
- }
- }
- }])
- }
-
-
- {
- UiKitMessage([{
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: 'Section + select'
- },
- accessory: {
- type: 'multi_static_select',
- options: [{
- text: {
- type: 'plain_text',
- text: 'button'
- },
- value: 1
- }, {
- text: {
- type: 'plain_text',
- text: 'opt 1'
- },
- value: 2
- }, {
- text: {
- type: 'plain_text',
- text: 'opt 2'
- },
- value: 3
- }, {
- text: {
- type: 'plain_text',
- text: 'opt 3'
- },
- value: 4
- }]
- }
- }])
- }
-
-
- {
- UiKitMessage([{
- type: 'image',
- title: {
type: 'plain_text',
- text: 'Example Image',
+ text: 'Option 1',
emoji: true
},
- imageUrl: 'https://raw.githubusercontent.com/RocketChat/Rocket.Chat.Artwork/master/Logos/icon-circle-256.png',
- altText: 'Example Image'
- }])
- }
-
-
- {
- UiKitMessage([{
- type: 'context',
- elements: [{
- type: 'image',
- title: {
- type: 'plain_text',
- text: 'Example Image',
- emoji: true
- },
- imageUrl: 'https://raw.githubusercontent.com/RocketChat/Rocket.Chat.Artwork/master/Logos/icon-circle-256.png',
- altText: 'Example Image'
+ value: 'value-0'
+ },
+ {
+ text: {
+ type: 'plain_text',
+ text: 'Option 2',
+ emoji: true
},
- {
- type: 'mrkdwn',
- text: 'context'
- }
- ]
- }])
- }
+ value: 'value-1'
+ },
+ {
+ text: {
+ type: 'plain_text',
+ text: 'Option 3',
+ emoji: true
+ },
+ value: 'value-2'
+ },
+ {
+ text: {
+ type: 'plain_text',
+ text: 'Option 4',
+ emoji: true
+ },
+ value: 'value-3'
+ }
+ ]
+ }
+ }
+]);
+stories.add('Section + Overflow', () => );
-
- {
- UiKitMessage([{
- type: 'actions',
- elements: [
- {
- type: 'button',
- text: {
- type: 'plain_text',
- emoji: true,
- text: 'Approve'
- },
- style: 'primary',
- value: 'click_me_123'
- },
- {
- type: 'button',
- text: {
- type: 'plain_text',
- emoji: true,
- text: 'Deny'
- },
- style: 'danger',
- value: 'click_me_123'
- },
- {
- type: 'button',
- text: {
- type: 'plain_text',
- emoji: true,
- text: 'Deny'
- },
- style: 'danger',
- value: 'click_me_123'
- },
- {
- type: 'button',
- text: {
- type: 'plain_text',
- emoji: true,
- text: 'Deny'
- },
- style: 'danger',
- value: 'click_me_123'
- },
- {
- type: 'button',
- text: {
- type: 'plain_text',
- emoji: true,
- text: 'Deny'
- },
- style: 'danger',
- value: 'click_me_123'
- },
- {
- type: 'button',
- text: {
- type: 'plain_text',
- emoji: true,
- text: 'Deny'
- },
- style: 'danger',
- value: 'click_me_123'
- },
- {
- type: 'button',
- text: {
- type: 'plain_text',
- emoji: true,
- text: 'Deny'
- },
- style: 'danger',
- value: 'click_me_123'
- }
- ]
- }])
- }
+const SectionImage = () => UiKitMessage([{
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'Section + Image'
+ },
+ accessory: {
+ type: 'image',
+ imageUrl: 'https://raw.githubusercontent.com/RocketChat/Rocket.Chat.Artwork/master/Logos/icon-circle-256.png',
+ altText: 'plants'
+ }
+}]);
+stories.add('Section + image', () => );
-
- {
- UiKitMessage([
- {
- type: 'section',
- fields: [
- {
- type: 'plain_text',
- text: '*this is plain_text text*',
- emoji: true
- },
- {
- type: 'plain_text',
- text: '*this is plain_text text*',
- emoji: true
- },
- {
- type: 'plain_text',
- text: '*this is plain_text text*',
- emoji: true
- },
- {
- type: 'plain_text',
- text: '*this is plain_text text*',
- emoji: true
- },
- {
- type: 'plain_text',
- text: '*this is plain_text text*',
- emoji: true
- }
- ]
- }])
- }
+const SectionButton = () => UiKitMessage([{
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'Section + button'
+ },
+ accessory: {
+ type: 'button',
+ text: {
+ type: 'plain_text',
+ text: 'button'
+ }
+ }
+}]);
+stories.add('Section + button', () => );
-
+const SectionSelect = () => UiKitMessage([{
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'Section + select'
+ },
+ accessory: {
+ type: 'static_select',
+ options: [
{
- UiKitMessage([{
- type: 'actions',
- elements: [
- {
- type: 'conversations_select',
- placeholder: {
- type: 'plain_text',
- text: 'Select a conversation',
- emoji: true
- }
- },
- {
- type: 'channels_select',
- placeholder: {
- type: 'plain_text',
- text: 'Select a channel',
- emoji: true
- }
- },
- {
- type: 'users_select',
- placeholder: {
- type: 'plain_text',
- text: 'Select a user',
- emoji: true
- }
- },
- {
- type: 'static_select',
- placeholder: {
- type: 'plain_text',
- text: 'Select an item',
- emoji: true
- },
- options: [
- {
- text: {
- type: 'plain_text',
- text: 'Excellent item 1',
- emoji: true
- },
- value: 'value-0'
- },
- {
- text: {
- type: 'plain_text',
- text: 'Fantastic item 2',
- emoji: true
- },
- value: 'value-1'
- },
- {
- text: {
- type: 'plain_text',
- text: 'Nifty item 3',
- emoji: true
- },
- value: 'value-2'
- },
- {
- text: {
- type: 'plain_text',
- text: 'Pretty good item 4',
- emoji: true
- },
- value: 'value-3'
- }
- ]
- }
- ]
- }])
+ value: 1,
+ text: {
+ type: 'plain_text',
+ text: 'button'
+ }
+ }, {
+ value: 2,
+ text: {
+ type: 'plain_text',
+ text: 'second button'
+ }
+ }]
+ }
+}]);
+stories.add('Section + Select', () => );
+
+const SectionDatePicker = () => UiKitMessage([{
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'Section + DatePicker'
+ },
+ accessory: {
+ type: 'datepicker',
+ initial_date: '1990-04-28',
+ placeholder: {
+ type: 'plain_text',
+ text: 'Select a date',
+ emoji: true
+ }
+ }
+}]);
+stories.add('Section + DatePicker', () => );
+
+const SectionMultiSelect = () => UiKitMessage([{
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'Section + select'
+ },
+ accessory: {
+ type: 'multi_static_select',
+ options: [{
+ text: {
+ type: 'plain_text',
+ text: 'button'
+ },
+ value: 1
+ }, {
+ text: {
+ type: 'plain_text',
+ text: 'opt 1'
+ },
+ value: 2
+ }, {
+ text: {
+ type: 'plain_text',
+ text: 'opt 2'
+ },
+ value: 3
+ }, {
+ text: {
+ type: 'plain_text',
+ text: 'opt 3'
+ },
+ value: 4
+ }]
+ }
+}]);
+stories.add('Section + Multi Select', () => );
+
+const Image = () => UiKitMessage([{
+ type: 'image',
+ title: {
+ type: 'plain_text',
+ text: 'Example Image',
+ emoji: true
+ },
+ imageUrl: 'https://raw.githubusercontent.com/RocketChat/Rocket.Chat.Artwork/master/Logos/icon-circle-256.png',
+ altText: 'Example Image'
+}]);
+stories.add('Image', () => );
+
+const Context = () => UiKitMessage([{
+ type: 'context',
+ elements: [{
+ type: 'image',
+ title: {
+ type: 'plain_text',
+ text: 'Example Image',
+ emoji: true
+ },
+ imageUrl: 'https://raw.githubusercontent.com/RocketChat/Rocket.Chat.Artwork/master/Logos/icon-circle-256.png',
+ altText: 'Example Image'
+ },
+ {
+ type: 'mrkdwn',
+ text: 'context'
+ }
+ ]
+}]);
+stories.add('Context', () => );
+
+const ActionButton = () => UiKitMessage([{
+ type: 'actions',
+ elements: [
+ {
+ type: 'button',
+ text: {
+ type: 'plain_text',
+ emoji: true,
+ text: 'Approve'
+ },
+ style: 'primary',
+ value: 'click_me_123'
+ },
+ {
+ type: 'button',
+ text: {
+ type: 'plain_text',
+ emoji: true,
+ text: 'Deny'
+ },
+ style: 'danger',
+ value: 'click_me_123'
+ },
+ {
+ type: 'button',
+ text: {
+ type: 'plain_text',
+ emoji: true,
+ text: 'Deny'
+ },
+ style: 'danger',
+ value: 'click_me_123'
+ },
+ {
+ type: 'button',
+ text: {
+ type: 'plain_text',
+ emoji: true,
+ text: 'Deny'
+ },
+ style: 'danger',
+ value: 'click_me_123'
+ },
+ {
+ type: 'button',
+ text: {
+ type: 'plain_text',
+ emoji: true,
+ text: 'Deny'
+ },
+ style: 'danger',
+ value: 'click_me_123'
+ },
+ {
+ type: 'button',
+ text: {
+ type: 'plain_text',
+ emoji: true,
+ text: 'Deny'
+ },
+ style: 'danger',
+ value: 'click_me_123'
+ },
+ {
+ type: 'button',
+ text: {
+ type: 'plain_text',
+ emoji: true,
+ text: 'Deny'
+ },
+ style: 'danger',
+ value: 'click_me_123'
+ }
+ ]
+}]);
+stories.add('Action - Buttons', () => );
+
+const Fields = () => UiKitMessage([
+ {
+ type: 'section',
+ fields: [
+ {
+ type: 'plain_text',
+ text: '*this is plain_text text*',
+ emoji: true
+ },
+ {
+ type: 'plain_text',
+ text: '*this is plain_text text*',
+ emoji: true
+ },
+ {
+ type: 'plain_text',
+ text: '*this is plain_text text*',
+ emoji: true
+ },
+ {
+ type: 'plain_text',
+ text: '*this is plain_text text*',
+ emoji: true
+ },
+ {
+ type: 'plain_text',
+ text: '*this is plain_text text*',
+ emoji: true
}
-
-
-);
+ ]
+ }]);
+stories.add('Fields', () => );
+
+const ActionSelect = () => UiKitMessage([{
+ type: 'actions',
+ elements: [
+ {
+ type: 'conversations_select',
+ placeholder: {
+ type: 'plain_text',
+ text: 'Select a conversation',
+ emoji: true
+ }
+ },
+ {
+ type: 'channels_select',
+ placeholder: {
+ type: 'plain_text',
+ text: 'Select a channel',
+ emoji: true
+ }
+ },
+ {
+ type: 'users_select',
+ placeholder: {
+ type: 'plain_text',
+ text: 'Select a user',
+ emoji: true
+ }
+ },
+ {
+ type: 'static_select',
+ placeholder: {
+ type: 'plain_text',
+ text: 'Select an item',
+ emoji: true
+ },
+ options: [
+ {
+ text: {
+ type: 'plain_text',
+ text: 'Excellent item 1',
+ emoji: true
+ },
+ value: 'value-0'
+ },
+ {
+ text: {
+ type: 'plain_text',
+ text: 'Fantastic item 2',
+ emoji: true
+ },
+ value: 'value-1'
+ },
+ {
+ text: {
+ type: 'plain_text',
+ text: 'Nifty item 3',
+ emoji: true
+ },
+ value: 'value-2'
+ },
+ {
+ text: {
+ type: 'plain_text',
+ text: 'Pretty good item 4',
+ emoji: true
+ },
+ value: 'value-3'
+ }
+ ]
+ }
+ ]
+}]);
+stories.add('Action - Select', () => );
+
+// stories.add('Section', () => UiKitMessage([{
+// type: 'section',
+// text: {
+// type: 'mrkdwn',
+// text: 'Section'
+// }
+// }]));
diff --git a/storybook/stories/UiKitModal.js b/storybook/stories/UiKitModal.js
index ddbfab6a6..2ec9e1da6 100644
--- a/storybook/stories/UiKitModal.js
+++ b/storybook/stories/UiKitModal.js
@@ -1,12 +1,12 @@
+/* eslint-disable import/no-extraneous-dependencies */
import React from 'react';
import { ScrollView, StyleSheet, SafeAreaView } from 'react-native';
+import { storiesOf } from '@storybook/react-native';
import { UiKitModal, UiKitComponent } from '../../app/containers/UIKit';
import { KitContext, defaultContext } from '../../app/containers/UIKit/utils';
-import StoriesSeparator from './StoriesSeparator';
-
-// eslint-disable-next-line react/prop-types
-const Separator = ({ title }) => ;
+import MessageContext from '../../app/containers/message/Context';
+import { themes } from '../../app/constants/colors';
const styles = StyleSheet.create({
container: {
@@ -18,547 +18,566 @@ const styles = StyleSheet.create({
}
});
-export default () => (
-
-
-
- {
- UiKitModal([
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: '*Rocket.Chat is free, unlimited and open source* 🚀\nIf you have any doubt ask to @rocketcat'
- }
- },
- {
- type: 'divider'
- },
- {
- type: 'section',
- fields: [
- {
- type: 'mrkdwn',
- text: '*Text 1*\nDescription, Mussum Ipsum, cacilds vidis litro'
- },
- {
- type: 'mrkdwn',
- text: '*Text 2*\nDescription, Mussum Ipsum, cacilds vidis litro'
- }
- ]
- },
- {
- type: 'section',
- fields: [
- {
- type: 'mrkdwn',
- text: '*Text 3*\nDescription, Mussum Ipsum, cacilds vidis litro'
- },
- {
- type: 'mrkdwn',
- text: '*Text 4*\nDescription, Mussum Ipsum, cacilds vidis litro'
- }
- ]
- }
- ])
- }
+const user = {
+ id: 'y8bd77ptZswPj3EW8',
+ username: 'diego.mello',
+ token: '79q6lH40W4ZRGLOshDiDiVlQaCc4f_lU9HNdHLAzuHz'
+};
-
- {
- UiKitModal([
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: '*Bruno Quadros*,\nPlease review your details for your *travel expense*.\nExpense no. *DA921*.'
- },
- accessory: {
- type: 'image',
- imageUrl: 'https://raw.githubusercontent.com/RocketChat/Rocket.Chat.Artwork/master/Logos/icon-circle-256.png'
- }
- },
- {
- type: 'divider'
- },
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: '*Date:*\n11/02/2020'
- }
- },
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: '*Category:*\nTravel'
- }
- },
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: '*Cost:*\n$150.00 USD'
- }
- },
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: '*Notes:*\nWebSummit Conference'
- }
- }
- ])
- }
+const baseUrl = 'https://open.rocket.chat';
-
- {
- UiKitModal([
- {
- type: 'input',
- element: {
- type: 'plain_text_input'
- },
- label: {
- type: 'plain_text',
- text: 'Outgoing Title',
- emoji: true
- },
- hint: {
- type: 'plain_text',
- text: 'Pick something unique!',
- emoji: true
- }
- },
- {
- type: 'input',
- element: {
- type: 'datepicker',
- initial_date: '1990-04-28',
- placeholder: {
- type: 'plain_text',
- text: 'Select a date',
- emoji: true
- }
- },
- label: {
- type: 'plain_text',
- text: 'Set a date',
- emoji: true
- }
- },
- {
- type: 'input',
- element: {
- type: 'multi_static_select',
- options: [{
- text: {
- type: 'plain_text',
- text: 'John'
- },
- value: 1
- }, {
- text: {
- type: 'plain_text',
- text: 'Dog'
- },
- value: 2
- }]
- },
- label: {
- type: 'plain_text',
- text: 'Share with...',
- emoji: true
- }
- }
- ])
- }
+const messageDecorator = story => (
+ {},
+ onLongPress: () => {},
+ reactionInit: () => {},
+ onErrorPress: () => {},
+ replyBroadcast: () => {},
+ onReactionPress: () => {},
+ onDiscussionPress: () => {},
+ onReactionLongPress: () => {},
+ threadBadgeColor: themes.light.tunreadColor
+ }}
+ >
+ {story()}
+
+);
-
- {
- UiKitModal([
- {
- type: 'context',
- elements: [{
- type: 'mrkdwn',
- text: 'Task: ZOL-994'
- }]
- },
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: 'Update Spec final assets'
- },
- accessory: {
- type: 'button',
- text: {
- type: 'plain_text',
- text: 'Change'
- }
- }
- },
- {
- type: 'divider'
- },
- {
- type: 'input',
- element: {
- type: 'plain_text_input',
- multiline: true
- },
- placeholder: {
- type: 'plain_text',
- text: 'Write Something',
- emoji: true
- },
- label: {
- type: 'plain_text',
- text: 'Notes',
- emoji: true
- },
- hint: {
- type: 'plain_text',
- text: 'Please take the time to compose something short',
- emoji: true
- },
- description: {
- type: 'plain_text',
- text: 'Describe your update',
- emoji: true
- }
- }
- ])
- }
+const stories = storiesOf('UiKitModal', module)
+ .addDecorator(story => {story()})
+ .addDecorator(story => {story()})
+ .addDecorator(messageDecorator);
-
+const ModalSectionSelects = () => UiKitModal([
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: '*Rocket.Chat is free, unlimited and open source* 🚀\nIf you have any doubt ask to @rocketcat'
+ }
+ },
+ {
+ type: 'divider'
+ },
+ {
+ type: 'section',
+ fields: [
{
- UiKitModal([
- {
- type: 'image',
- title: {
- type: 'plain_text',
- text: 'Example Image',
- emoji: true
- },
- imageUrl: 'https://raw.githubusercontent.com/RocketChat/Rocket.Chat.Artwork/master/Logos/icon-circle-256.png',
- alt_text: 'Example Image'
- },
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: 'How could be the life in Mars?'
- }
- },
- {
- type: 'context',
- elements: [
- {
- type: 'image',
- imageUrl: 'https://raw.githubusercontent.com/RocketChat/Rocket.Chat.Artwork/master/Logos/icon-circle-256.png'
- },
- {
- type: 'mrkdwn',
- text: 'November 25, 2019'
- }
- ]
- },
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: '*Next stop, Mars!*\nMussum Ipsum, cacilds vidis litro abertis. Admodum accumsan disputationi eu sit. Vide electram sadipscing et per. Diuretics paradis num copo é motivis de denguis. Mais vale um bebadis conhecidiss, que um alcoolatra anonimis. Aenean aliquam molestie leo, vitae iaculis nisl.'
- }
- }
- ])
+ type: 'mrkdwn',
+ text: '*Text 1*\nDescription, Mussum Ipsum, cacilds vidis litro'
+ },
+ {
+ type: 'mrkdwn',
+ text: '*Text 2*\nDescription, Mussum Ipsum, cacilds vidis litro'
}
-
-
+ ]
+ },
+ {
+ type: 'section',
+ fields: [
{
- UiKitModal([{
- type: 'input',
- element: {
- type: 'plain_text_input'
- },
- label: {
- type: 'plain_text',
- text: 'Title',
- emoji: true
- }
+ type: 'mrkdwn',
+ text: '*Text 3*\nDescription, Mussum Ipsum, cacilds vidis litro'
+ },
+ {
+ type: 'mrkdwn',
+ text: '*Text 4*\nDescription, Mussum Ipsum, cacilds vidis litro'
+ }
+ ]
+ }
+]);
+stories.add('Modal - Section and Selects', () => );
+
+const ModalSectionAccessories = () => UiKitModal([
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: '*Bruno Quadros*,\nPlease review your details for your *travel expense*.\nExpense no. *DA921*.'
+ },
+ accessory: {
+ type: 'image',
+ imageUrl: 'https://raw.githubusercontent.com/RocketChat/Rocket.Chat.Artwork/master/Logos/icon-circle-256.png'
+ }
+ },
+ {
+ type: 'divider'
+ },
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: '*Date:*\n11/02/2020'
+ }
+ },
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: '*Category:*\nTravel'
+ }
+ },
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: '*Cost:*\n$150.00 USD'
+ }
+ },
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: '*Notes:*\nWebSummit Conference'
+ }
+ }
+]);
+stories.add('Modal - Section Accessories', () => );
+
+const ModalFormInput = () => UiKitModal([
+ {
+ type: 'input',
+ element: {
+ type: 'plain_text_input'
+ },
+ label: {
+ type: 'plain_text',
+ text: 'Outgoing Title',
+ emoji: true
+ },
+ hint: {
+ type: 'plain_text',
+ text: 'Pick something unique!',
+ emoji: true
+ }
+ },
+ {
+ type: 'input',
+ element: {
+ type: 'datepicker',
+ initial_date: '1990-04-28',
+ placeholder: {
+ type: 'plain_text',
+ text: 'Select a date',
+ emoji: true
+ }
+ },
+ label: {
+ type: 'plain_text',
+ text: 'Set a date',
+ emoji: true
+ }
+ },
+ {
+ type: 'input',
+ element: {
+ type: 'multi_static_select',
+ options: [{
+ text: {
+ type: 'plain_text',
+ text: 'John'
},
+ value: 1
+ }, {
+ text: {
+ type: 'plain_text',
+ text: 'Dog'
+ },
+ value: 2
+ }]
+ },
+ label: {
+ type: 'plain_text',
+ text: 'Share with...',
+ emoji: true
+ }
+ }
+]);
+stories.add('Modal - Form Input', () => );
+
+const ModalFormTextArea = () => UiKitModal([
+ {
+ type: 'context',
+ elements: [{
+ type: 'mrkdwn',
+ text: 'Task: ZOL-994'
+ }]
+ },
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'Update Spec final assets'
+ },
+ accessory: {
+ type: 'button',
+ text: {
+ type: 'plain_text',
+ text: 'Change'
+ }
+ }
+ },
+ {
+ type: 'divider'
+ },
+ {
+ type: 'input',
+ element: {
+ type: 'plain_text_input',
+ multiline: true
+ },
+ placeholder: {
+ type: 'plain_text',
+ text: 'Write Something',
+ emoji: true
+ },
+ label: {
+ type: 'plain_text',
+ text: 'Notes',
+ emoji: true
+ },
+ hint: {
+ type: 'plain_text',
+ text: 'Please take the time to compose something short',
+ emoji: true
+ },
+ description: {
+ type: 'plain_text',
+ text: 'Describe your update',
+ emoji: true
+ }
+ }
+]);
+stories.add('Modal - Form TextArea', () => );
+
+const ModalImages = () => UiKitModal([
+ {
+ type: 'image',
+ title: {
+ type: 'plain_text',
+ text: 'Example Image',
+ emoji: true
+ },
+ imageUrl: 'https://raw.githubusercontent.com/RocketChat/Rocket.Chat.Artwork/master/Logos/icon-circle-256.png',
+ alt_text: 'Example Image'
+ },
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'How could be the life in Mars?'
+ }
+ },
+ {
+ type: 'context',
+ elements: [
+ {
+ type: 'image',
+ imageUrl: 'https://raw.githubusercontent.com/RocketChat/Rocket.Chat.Artwork/master/Logos/icon-circle-256.png'
+ },
+ {
+ type: 'mrkdwn',
+ text: 'November 25, 2019'
+ }
+ ]
+ },
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: '*Next stop, Mars!*\nMussum Ipsum, cacilds vidis litro abertis. Admodum accumsan disputationi eu sit. Vide electram sadipscing et per. Diuretics paradis num copo é motivis de denguis. Mais vale um bebadis conhecidiss, que um alcoolatra anonimis. Aenean aliquam molestie leo, vitae iaculis nisl.'
+ }
+ }
+]);
+stories.add('Modal - Images', () => );
+
+const ModalActions = () => UiKitModal([{
+ type: 'input',
+ element: {
+ type: 'plain_text_input'
+ },
+ label: {
+ type: 'plain_text',
+ text: 'Title',
+ emoji: true
+ }
+},
+{
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'Details'
+ }
+},
+{
+ type: 'section',
+ accessory: {
+ type: 'static_select',
+ options: [
+ {
+ value: 1,
+ text: {
+ type: 'plain_text',
+ text: 'TypeL Task'
+ }
+ }, {
+ value: 2,
+ text: {
+ type: 'plain_text',
+ text: 'second button'
+ }
+ }]
+ }
+},
+{
+ type: 'section',
+ accessory: {
+ type: 'static_select',
+ options: [
+ {
+ value: 1,
+ text: {
+ type: 'plain_text',
+ text: 'Project: Space (winter)'
+ }
+ }, {
+ value: 2,
+ text: {
+ type: 'plain_text',
+ text: 'second button'
+ }
+ }]
+ }
+},
+{
+ type: 'section',
+ accessory: {
+ type: 'static_select',
+ options: [
+ {
+ value: 1,
+ text: {
+ type: 'plain_text',
+ text: 'Priority (optional)'
+ }
+ }, {
+ value: 2,
+ text: {
+ type: 'plain_text',
+ text: 'second button'
+ }
+ }]
+ }
+},
+{
+ type: 'section',
+ accessory: {
+ type: 'static_select',
+ options: [
+ {
+ value: 1,
+ text: {
+ type: 'plain_text',
+ text: 'Assinee (optional)'
+ }
+ }, {
+ value: 2,
+ text: {
+ type: 'plain_text',
+ text: 'second button'
+ }
+ }]
+ }
+},
+{
+ type: 'input',
+ element: {
+ type: 'plain_text_input',
+ multiline: true
+ },
+ placeholder: {
+ type: 'plain_text',
+ text: 'Write Something',
+ emoji: true
+ },
+ label: {
+ type: 'plain_text',
+ text: 'Description',
+ emoji: true
+ }
+}]);
+stories.add('Modal - Actions', () => );
+
+const ModalContextsDividers = () => UiKitModal([
+ {
+ type: 'context',
+ elements: [{
+ type: 'mrkdwn',
+ text: 'Due today'
+ }]
+ },
+ {
+ type: 'divider'
+ },
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'Finish interface componests (3 hours)'
+ },
+ accessory: {
+ blockId: 'overflow-1',
+ type: 'overflow',
+ options: [
{
- type: 'section',
text: {
- type: 'mrkdwn',
- text: 'Details'
- }
- },
- {
- type: 'section',
- accessory: {
- type: 'static_select',
- options: [
- {
- value: 1,
- text: {
- type: 'plain_text',
- text: 'TypeL Task'
- }
- }, {
- value: 2,
- text: {
- type: 'plain_text',
- text: 'second button'
- }
- }]
- }
- },
- {
- type: 'section',
- accessory: {
- type: 'static_select',
- options: [
- {
- value: 1,
- text: {
- type: 'plain_text',
- text: 'Project: Space (winter)'
- }
- }, {
- value: 2,
- text: {
- type: 'plain_text',
- text: 'second button'
- }
- }]
- }
- },
- {
- type: 'section',
- accessory: {
- type: 'static_select',
- options: [
- {
- value: 1,
- text: {
- type: 'plain_text',
- text: 'Priority (optional)'
- }
- }, {
- value: 2,
- text: {
- type: 'plain_text',
- text: 'second button'
- }
- }]
- }
- },
- {
- type: 'section',
- accessory: {
- type: 'static_select',
- options: [
- {
- value: 1,
- text: {
- type: 'plain_text',
- text: 'Assinee (optional)'
- }
- }, {
- value: 2,
- text: {
- type: 'plain_text',
- text: 'second button'
- }
- }]
- }
- },
- {
- type: 'input',
- element: {
- type: 'plain_text_input',
- multiline: true
+ type: 'plain_text',
+ text: 'Details',
+ emoji: true
},
+ value: 'value-0'
+ },
+ {
+ text: {
+ type: 'plain_text',
+ text: 'Remove',
+ emoji: true
+ },
+ value: 'value-1'
+ }
+ ]
+ }
+ },
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'English Class (1 hour)'
+ },
+ accessory: {
+ blockId: 'overflow-2',
+ type: 'overflow',
+ options: [
+ {
+ text: {
+ type: 'plain_text',
+ text: 'Details',
+ emoji: true
+ },
+ value: 'value-0'
+ },
+ {
+ text: {
+ type: 'plain_text',
+ text: 'Remove',
+ emoji: true
+ },
+ value: 'value-1'
+ }
+ ]
+ }
+ },
+ {
+ type: 'section',
+ text: {
+ type: 'mrkdwn',
+ text: 'Send an email to John (15min)'
+ },
+ accessory: {
+ blockId: 'overflow-3',
+ type: 'overflow',
+ options: [
+ {
+ text: {
+ type: 'plain_text',
+ text: 'Details',
+ emoji: true
+ },
+ value: 'value-0'
+ },
+ {
+ text: {
+ type: 'plain_text',
+ text: 'Remove',
+ emoji: true
+ },
+ value: 'value-1'
+ }
+ ]
+ }
+ }
+]);
+stories.add('Modal - Contexts and Dividers', () => );
+
+const ModalInputWithError = () => (
+
+
+
+);
+stories.add('Modal - Input with error', () => );
+
+const ModalMultilneWithError = () => (
+
+
+
+);
+stories.add('Modal - Multilne with error', () => );
+
+const ModalDatePickerWithError = () => (
+
+
- {
- UiKitModal([
- {
- type: 'context',
- elements: [{
- type: 'mrkdwn',
- text: 'Due today'
- }]
- },
- {
- type: 'divider'
- },
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: 'Finish interface componests (3 hours)'
- },
- accessory: {
- blockId: 'overflow-1',
- type: 'overflow',
- options: [
- {
- text: {
- type: 'plain_text',
- text: 'Details',
- emoji: true
- },
- value: 'value-0'
- },
- {
- text: {
- type: 'plain_text',
- text: 'Remove',
- emoji: true
- },
- value: 'value-1'
- }
- ]
- }
- },
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: 'English Class (1 hour)'
- },
- accessory: {
- blockId: 'overflow-2',
- type: 'overflow',
- options: [
- {
- text: {
- type: 'plain_text',
- text: 'Details',
- emoji: true
- },
- value: 'value-0'
- },
- {
- text: {
- type: 'plain_text',
- text: 'Remove',
- emoji: true
- },
- value: 'value-1'
- }
- ]
- }
- },
- {
- type: 'section',
- text: {
- type: 'mrkdwn',
- text: 'Send an email to John (15min)'
- },
- accessory: {
- blockId: 'overflow-3',
- type: 'overflow',
- options: [
- {
- text: {
- type: 'plain_text',
- text: 'Details',
- emoji: true
- },
- value: 'value-0'
- },
- {
- text: {
- type: 'plain_text',
- text: 'Remove',
- emoji: true
- },
- value: 'value-1'
- }
- ]
- }
- }
- ])
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ },
+ label: {
+ type: 'plain_text',
+ text: 'Label',
+ emoji: true
+ }
+ }]}
+ />
+
);
+stories.add('Modal - DatePicker with error', () => );
diff --git a/storybook/stories/index.js b/storybook/stories/index.js
index cd84085c1..20bfc4f25 100644
--- a/storybook/stories/index.js
+++ b/storybook/stories/index.js
@@ -1,37 +1,22 @@
/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */
-import React from 'react';
-import { Provider } from 'react-redux';
import { createStore, combineReducers } from 'redux';
-import { storiesOf } from '@storybook/react-native';
-import RoomItem from './RoomItem';
+import './RoomItem';
import './List';
import './ServerItem';
-import Message from './Message';
-import UiKitMessage from './UiKitMessage';
-import UiKitModal from './UiKitModal';
-import Markdown from './Markdown';
+import './Message';
+import './UiKitMessage';
+import './UiKitModal';
+import './Markdown';
import './HeaderButtons';
import './UnreadBadge';
import '../../app/views/ThreadMessagesView/Item.stories.js';
+import './Avatar';
import '../../app/containers/BackgroundContainer/index.stories.js';
import '../../app/containers/RoomHeader/RoomHeader.stories.js';
-import Avatar from './Avatar';
-// import RoomViewHeader from './RoomViewHeader';
-
-import MessageContext from '../../app/containers/message/Context';
-import { themes } from '../../app/constants/colors';
-
-// MessageProvider
-const baseUrl = 'https://open.rocket.chat';
-const user = {
- id: '',
- username: 'diego.mello',
- token: ''
-};
// Change here to see themed storybook
-const theme = 'light';
+export const theme = 'light';
const reducers = combineReducers({
settings: () => ({}),
@@ -52,47 +37,4 @@ const reducers = combineReducers({
meteor: () => ({ connected: true }),
activeUsers: () => ({ abc: { status: 'online', statusText: 'dog' } })
});
-const store = createStore(reducers);
-
-const messageDecorator = story => (
- {},
- onLongPress: () => {},
- reactionInit: () => {},
- onErrorPress: () => {},
- replyBroadcast: () => {},
- onReactionPress: () => {},
- onDiscussionPress: () => {},
- onReactionLongPress: () => {},
- threadBadgeColor: themes.light.tunreadColor
- }}
- >
- {story()}
-
-);
-
-storiesOf('RoomItem', module)
- .addDecorator(story => {story()})
- .add('list roomitem', () => );
-storiesOf('Message', module)
- .addDecorator(story => {story()})
- .addDecorator(messageDecorator)
- .add('list message', () => );
-
-storiesOf('UiKitMessage', module)
- .addDecorator(messageDecorator)
- .add('list uikitmessage', () => );
-storiesOf('UiKitModal', module)
- .addDecorator(messageDecorator)
- .add('list UiKitModal', () => );
-storiesOf('Markdown', module)
- .add('list Markdown', () => );
-storiesOf('Avatar', module)
- .add('list Avatar', () => );
-
-// FIXME: I couldn't make these pass on jest :(
-// storiesOf('RoomViewHeader', module)
-// .add('list', () => );
+export const store = createStore(reducers);
diff --git a/yarn.lock b/yarn.lock
index 2938649e3..0fc1c6c53 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4610,12 +4610,12 @@ bunyan-debug-stream@^1.1.0:
exception-formatter "^1.0.4"
bunyan@^1.8.12:
- version "1.8.12"
- resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.12.tgz#f150f0f6748abdd72aeae84f04403be2ef113797"
- integrity sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=
+ version "1.8.15"
+ resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.15.tgz#8ce34ca908a17d0776576ca1b2f6cbd916e93b46"
+ integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==
optionalDependencies:
dtrace-provider "~0.8"
- moment "^2.10.6"
+ moment "^2.19.3"
mv "~2"
safe-json-stringify "~1"
@@ -4756,6 +4756,11 @@ camelcase@^5.0.0, camelcase@^5.3.1:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+camelcase@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
+ integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
+
camelize@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b"
@@ -5046,6 +5051,15 @@ cliui@^6.0.0:
strip-ansi "^6.0.0"
wrap-ansi "^6.2.0"
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
clone-deep@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713"
@@ -5726,6 +5740,11 @@ decamelize@^3.2.0:
dependencies:
xregexp "^4.2.4"
+decamelize@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
+ integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
+
decode-uri-component@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
@@ -5904,10 +5923,10 @@ detect-port@^1.3.0:
address "^1.0.1"
debug "^2.6.0"
-detox@^16.9.0:
- version "16.9.2"
- resolved "https://registry.yarnpkg.com/detox/-/detox-16.9.2.tgz#3b99be3df54ef0f35ffe12d3aa87b556d00a50d3"
- integrity sha512-yi74zL3hHFRU131B5tgZiYh0hPWvpryntllAKEpxRGRRuz+11s2+TjpuS0M02jGOdDMFBk5BzcXFGM57FWbWNA==
+detox@^18.10.0:
+ version "18.10.0"
+ resolved "https://registry.yarnpkg.com/detox/-/detox-18.10.0.tgz#8b8d6b6f2bf9775f09d92b63f98dc1b5f4c9334e"
+ integrity sha512-okqMongBq0hKuJN8hxVHoBjM3Ms0XbaaWq5PyZGWuog3SXTX18ux8YjSmCU2J8ESA8muXyuOpl9KGgT8bWJTHA==
dependencies:
bunyan "^1.8.12"
bunyan-debug-stream "^1.1.0"
@@ -5921,16 +5940,18 @@ detox@^16.9.0:
lodash "^4.17.5"
minimist "^1.2.0"
proper-lockfile "^3.0.2"
+ resolve-from "^5.0.0"
sanitize-filename "^1.6.1"
- shell-utils "^1.0.9"
+ serialize-error "^8.0.1"
+ shell-quote "^1.7.2"
signal-exit "^3.0.3"
tail "^2.0.0"
telnet-client "1.2.8"
tempfile "^2.0.0"
which "^1.3.1"
- ws "^3.3.1"
- yargs "^13.0.0"
- yargs-parser "^13.0.0"
+ ws "^7.4.3"
+ yargs "^16.0.3"
+ yargs-unparser "^2.0.0"
diff-sequences@^24.9.0:
version "24.9.0"
@@ -6323,6 +6344,11 @@ es6-shim@^0.35.5:
resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.5.tgz#46f59dc0a84a1c5029e8ff1166ca0a902077a9ab"
integrity sha512-E9kK/bjtCQRpN1K28Xh4BlmP8egvZBGJJ+9GtnzOwt7mdqtrjHFuVGr7QJfdjBIKqrlU5duPf3pCBoDrkjVYFg==
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@@ -7281,12 +7307,17 @@ flat-cache@^2.0.1:
write "1.0.3"
flat@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2"
- integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b"
+ integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==
dependencies:
is-buffer "~2.0.3"
+flat@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
+ integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
flatted@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
@@ -7543,7 +7574,7 @@ get-caller-file@^1.0.1:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
-get-caller-file@^2.0.1:
+get-caller-file@^2.0.1, get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
@@ -8294,7 +8325,12 @@ inherits@2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
+ini@^1.3.4:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+ini@^1.3.5, ini@~1.3.0:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
@@ -8465,9 +8501,9 @@ is-buffer@^1.1.5:
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
is-buffer@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
- integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
+ integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
is-callable@^1.1.4, is-callable@^1.1.5:
version "1.1.5"
@@ -8676,6 +8712,11 @@ is-plain-obj@^1.0.0:
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+is-plain-obj@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
@@ -10290,11 +10331,16 @@ lodash@4.17.20, lodash@^4.0.0:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
-lodash@4.x.x, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.5.0:
+lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.5.0:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+lodash@^4.17.5:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
log-symbols@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4"
@@ -11121,12 +11167,12 @@ moment@2.27.0:
resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d"
integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==
-moment@2.x.x, moment@^2.10.6:
+moment@2.x.x:
version "2.26.0"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.26.0.tgz#5e1f82c6bafca6e83e808b30c8705eed0dcbd39a"
integrity sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==
-moment@^2.24.0:
+moment@^2.19.3, moment@^2.24.0:
version "2.29.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
@@ -11177,11 +11223,16 @@ mv@~2:
ncp "~2.0.0"
rimraf "~2.4.0"
-nan@^2.12.1, nan@^2.14.0:
+nan@^2.12.1:
version "2.14.1"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
+nan@^2.14.0:
+ version "2.14.2"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
+ integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
+
nanoid@^3.1.9:
version "3.1.10"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.10.tgz#69a8a52b77892de0d11cede96bc9762852145bc4"
@@ -14022,6 +14073,13 @@ serialize-error@^2.1.0:
resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a"
integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=
+serialize-error@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.0.1.tgz#7a67f8ecbbf28973b5a954a2852ff9f4eef52d99"
+ integrity sha512-r5o60rWFS+8/b49DNAbB+GXZA0SpDpuWE758JxDKgRTga05r3U5lwyksE91dYKDhXSmnu36RALj615E6Aj5pSg==
+ dependencies:
+ type-fest "^0.20.2"
+
serialize-javascript@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61"
@@ -14139,18 +14197,11 @@ shell-quote@1.6.1:
array-reduce "~0.0.0"
jsonify "~0.0.0"
-shell-quote@1.7.2, shell-quote@^1.6.1:
+shell-quote@1.7.2, shell-quote@^1.6.1, shell-quote@^1.7.2:
version "1.7.2"
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
-shell-utils@^1.0.9:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/shell-utils/-/shell-utils-1.0.10.tgz#7fe7b8084f5d6d21323d941267013bc38aed063e"
- integrity sha512-p1xuqhj3jgcXiV8wGoF1eL/NOvapN9tyGDoObqKwvZTUZn7fIzK75swLTEHfGa7sObeN9vxFplHw/zgYUYRTsg==
- dependencies:
- lodash "4.x.x"
-
shelljs@^0.7.8:
version "0.7.8"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
@@ -14890,9 +14941,9 @@ table@^5.2.3:
string-width "^3.0.0"
tail@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/tail/-/tail-2.0.3.tgz#37567adc4624a70b35f1d146c3376fa3d6ef7c04"
- integrity sha512-s9NOGkLqqiDEtBttQZI7acLS8ycYK5sTlDwNjGnpXG9c8AWj0cfAtwEIzo/hVRMMiC5EYz+bXaJWC1u1u0GPpQ==
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tail/-/tail-2.2.1.tgz#3369a786dde3d7b1a5baa3a0accea09348bc5a83"
+ integrity sha512-pqtI8HB6pbltcaDxkTq12meYxMeLNtZg7+h+c2WlXofaOh4bUeLFQ3eU8S23niqb8We4/UFc+QNlky9nCRnrSQ==
tapable@^1.0.0, tapable@^1.1.3:
version "1.1.3"
@@ -15288,6 +15339,11 @@ type-fest@^0.11.0:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
type-fest@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
@@ -16034,6 +16090,15 @@ wrap-ansi@^6.2.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -16091,7 +16156,7 @@ ws@^1.1.0, ws@^1.1.5:
options ">=0.0.5"
ultron "1.0.x"
-ws@^3.3.1, ws@^3.3.3:
+ws@^3.3.3:
version "3.3.3"
resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==
@@ -16117,6 +16182,11 @@ ws@^7.0.0:
resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8"
integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==
+ws@^7.4.3:
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59"
+ integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==
+
xcode@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.1.0.tgz#bab64a7e954bb50ca8d19da7e09531c65a43ecfe"
@@ -16224,6 +16294,11 @@ y18n@^4.0.0:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+y18n@^5.0.5:
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.7.tgz#0c514aba53fc40e2db911aeb8b51566a3374efe7"
+ integrity sha512-oOhslryvNcA1lB9WYr+M6TMyLkLg81Dgmyb48ZDU0lvR+5bmNDTMz7iobM1QXooaLhbbrcHrlNaABhI6Vo6StQ==
+
yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
@@ -16244,7 +16319,7 @@ yaml@^1.7.2:
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
-yargs-parser@13.1.2, yargs-parser@^13.0.0, yargs-parser@^13.1.2:
+yargs-parser@13.1.2, yargs-parser@^13.1.2:
version "13.1.2"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
@@ -16268,6 +16343,11 @@ yargs-parser@^18.1.2:
camelcase "^5.0.0"
decamelize "^1.2.0"
+yargs-parser@^20.2.2:
+ version "20.2.7"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a"
+ integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==
+
yargs-parser@^9.0.2:
version "9.0.2"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
@@ -16284,7 +16364,17 @@ yargs-unparser@1.6.0:
lodash "^4.17.15"
yargs "^13.3.0"
-yargs@13.3.2, yargs@^13.0.0, yargs@^13.3.0:
+yargs-unparser@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
+ integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
+ dependencies:
+ camelcase "^6.0.0"
+ decamelize "^4.0.0"
+ flat "^5.0.2"
+ is-plain-obj "^2.1.0"
+
+yargs@13.3.2, yargs@^13.3.0:
version "13.3.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
@@ -16368,3 +16458,16 @@ yargs@^15.1.0, yargs@^15.3.1:
which-module "^2.0.0"
y18n "^4.0.0"
yargs-parser "^18.1.2"
+
+yargs@^16.0.3:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"