Content: Load images with auth
This commit is contained in:
parent
a4a86a4c18
commit
37b751723c
2 changed files with 32 additions and 3 deletions
|
@ -9,6 +9,7 @@ import {IContentBlock} from '../blocks/contentBlock'
|
||||||
import {MutableDividerBlock} from '../blocks/dividerBlock'
|
import {MutableDividerBlock} from '../blocks/dividerBlock'
|
||||||
import {MutableTextBlock} from '../blocks/textBlock'
|
import {MutableTextBlock} from '../blocks/textBlock'
|
||||||
import mutator from '../mutator'
|
import mutator from '../mutator'
|
||||||
|
import octoClient from '../octoClient'
|
||||||
import {Utils} from '../utils'
|
import {Utils} from '../utils'
|
||||||
import IconButton from '../widgets/buttons/iconButton'
|
import IconButton from '../widgets/buttons/iconButton'
|
||||||
import AddIcon from '../widgets/icons/add'
|
import AddIcon from '../widgets/icons/add'
|
||||||
|
@ -33,7 +34,24 @@ type Props = {
|
||||||
intl: IntlShape
|
intl: IntlShape
|
||||||
}
|
}
|
||||||
|
|
||||||
class ContentBlock extends React.PureComponent<Props> {
|
type State = {
|
||||||
|
imageDataUrl?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
class ContentBlock extends React.PureComponent<Props, State> {
|
||||||
|
state: State = {}
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
if (this.props.block.type === 'image' && !this.state.imageDataUrl) {
|
||||||
|
this.loadImage()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async loadImage() {
|
||||||
|
const imageDataUrl = await octoClient.fetchImage(this.props.block.fields.url)
|
||||||
|
this.setState({imageDataUrl})
|
||||||
|
}
|
||||||
|
|
||||||
public render(): JSX.Element | null {
|
public render(): JSX.Element | null {
|
||||||
const {intl, card, contents, block} = this.props
|
const {intl, card, contents, block} = this.props
|
||||||
|
|
||||||
|
@ -160,9 +178,9 @@ class ContentBlock extends React.PureComponent<Props> {
|
||||||
readonly={this.props.readonly}
|
readonly={this.props.readonly}
|
||||||
/>}
|
/>}
|
||||||
{block.type === 'divider' && <div className='divider'/>}
|
{block.type === 'divider' && <div className='divider'/>}
|
||||||
{block.type === 'image' &&
|
{block.type === 'image' && this.state.imageDataUrl &&
|
||||||
<img
|
<img
|
||||||
src={block.fields.url}
|
src={this.state.imageDataUrl}
|
||||||
alt={block.title}
|
alt={block.title}
|
||||||
/>}
|
/>}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -316,6 +316,17 @@ class OctoClient {
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Images
|
||||||
|
|
||||||
|
async fetchImage(url: string): Promise<string> {
|
||||||
|
const response = await fetch(url, {headers: this.headers()})
|
||||||
|
if (response.status !== 200) {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
const blob = await response.blob()
|
||||||
|
return URL.createObjectURL(blob)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getReadToken(): string {
|
function getReadToken(): string {
|
||||||
|
|
Loading…
Reference in a new issue